我创建了一个反应父组件,它将一些道具传递给它的子组件,并持有一个onclick函数。当单击产品组件时,onclick函数应该console.log'WORKED',这不起作用,控制台上没有显示任何内容。我不明白我错在哪里,这应该是如此简单。我是不是犯了一个我一直忽略的愚蠢错误?
这是我的父组件代码:
import React from 'react';
import { connect } from 'react-redux';
import Product from '../components/product.js';
import { bindActionCreators } from 'redux';
import { changeTotal } from '../actions/index.js';
import { selectProduct } from '../actions/index.js';
class ProductList extends React.Component {
constructor(props) {
super(props);
this.state={
total: 0
}
this.addFromTotal = this.addFromTotal.bind(this);
this.subtractFromTotal = this.subtractFromTotal.bind(this);
this.handleClick = this.handleClick.bind(this);
}
handleClick() {
console.log('done')
}
addFromTotal(product) {
var x = Number(product.price)
this.setState({total: this.state.total + x}, () => {
console.log('total is ' + this.state.total);
var total = this.state.total;
this.props.changeTotal(total);
});
}
subtractFromTotal(product) {
var x = Number(product.price)
this.setState({total: this.state.total - x}, () => {
console.log('total is ' + this.state.total);
var total = this.state.total;
this.props.changeTotal(total);
});
}
render() {
var createProductList = this.props.products.map((product, i) => {
return <Product
key={i}
title={product.title}
price={product.price}
definition={product.definition}
source={product.source}
addFromTotal={() => this.addFromTotal(product)}
subtractFromTotal={() => this.subtractFromTotal(product)}
// onClick={() => this.props.selectProduct(product)}
onClick={this.handleClick}
/>
});
return (
<div>
<div>Product List</div>
<div style={{display: 'flex', flexDirection: 'row'}}>{createProductList}</div>
</div>
);
}
}
function mapStateToProps(state) {
return {
products : state.products
}
}
function mapDispatchToProps(dispatch) {
return bindActionCreators({ changeTotal: changeTotal }, dispatch);
}
export default connect(mapStateToProps, mapDispatchToProps)(ProductList);
以下是产品(子)组件的代码:
import React from 'react';
import { connect } from 'react-redux';
import { bindActionCreators } from 'redux';
import { updateItemObject } from '../actions/index.js'
class Product extends React.Component {
constructor(props) {
super(props);
this.state = {
counter: 0,
itemTotal: 0
}
this.handleAdd = this.handleAdd.bind(this);
this.handleSubtract = this.handleSubtract.bind(this);
}
handleAdd(product) {
var x = Number(this.props.price)
this.setState({
itemTotal: this.state.itemTotal + x,
counter: this.state.counter + 1
}, () => {
console.log('item total ' + this.state.itemTotal);
console.log('item count ' + this.state.counter);
this.props.addFromTotal(product);
});
}
handleSubtract(product) {
if(this.state.counter === 0) {
return;
}
var x = Number(this.props.price)
this.setState({
itemTotal: this.state.itemTotal - x,
counter: this.state.counter - 1
}, () => {
console.log('item total ' + this.state.itemTotal);
console.log('item count ' + this.state.counter);
this.props.subtractFromTotal(product);
});
}
render() {
return (
<div style={{margin: '20px', backgroundColor: '#F5F5F5', cursor: 'pointer'}}>
<div>product name: {this.props.title}</div>
<div>product price: {this.props.price}</div>
<div>product definition: {this.props.definition}</div>
<div style={{
backgroundImage: this.props.source,
backgroundSize: 'cover',
padding: '15px',
margin: '15px',
height: '200px',
width: '250px'
}}>
</div>
<div>
<span style={{cursor: 'pointer'}} onClick={this.handleAdd}>+ </span>
<span style={{cursor: 'pointer'}} onClick={this.handleSubtract}>-</span>
</div>
<div>
<div>x{this.state.counter} {this.props.title} for a sum of {this.state.itemTotal}</div>
</div>
</div>
);
}
}
function mapDispatchToProps(dispatch) {
return bindActionCreators({ updateItemObject: updateItemObject }, dispatch);
}
export default connect(null, mapDispatchToProps)(Product);
您将onClark作为道具从父组件传递到子组件,但在子组件中,我没有看到您的调用props.on单击子组件中的某些单击事件。
您没有使用传递给该组件内的product
组件的onClick
道具。因此,它没有被解雇。您必须将事件处理程序分配给product
组件中的某个元素,这将触发作为prop传递给它的方法,如下所示
// Product.js component
render() {
return (
<div onClick={this.props.onClick} style={{margin: '20px', backgroundColor: '#F5F5F5', cursor: 'pointer'}}>
....
我有一个在父组件中生成的事件,子组件必须对此作出反应。我知道在中不建议使用这种方法,我必须执行emit,这非常糟糕。所以我的代码是这个。 正如您所看到的,在无限滚动上被触发,事件被发送到子组件搜索。不仅仅是搜索,因为它是根,所以它正在向每个人广播。 什么是更好的方法。我知道我应该使用道具,但我不知道在这种情况下我该怎么做。
诉求:react父组件某些值改变后,需要让子组件同步更新,但是这个过程不能让父组件重新渲染 请帮忙罗列下所有可能的方式
我在react native中有一个搜索栏组件,它在父组件中导入, SearchBar子组件具有以下元素: 是否可以访问此子组件在其中导入的父组件中的状态?提前感谢你的帮助
我想访问
我有一个包含HTML组件,如下所示: 此组件的CSS(或部分CSS)为: 其基本思想是,当通过页面上的某个click事件应用时,中的div会发生一些动画。因此该组件中的divs类似于: 使用CSS: 我的问题是,上面的页面(带有)是发生事件的地方,因此它也是应用类的地方。但是,实际的组件,它只是包含一堆div(应该是动画的),嗯,它们根本没有动画。 我可以看到类是在单击按钮时应用的,但我猜当类应用
本文向大家介绍Vue父组件调用子组件事件方法,包括了Vue父组件调用子组件事件方法的使用技巧和注意事项,需要的朋友参考一下 Vue父组件向子组件传递事件/调用事件 不是传递数据(props)哦,适用于 Vue 2.0 方法一:子组件监听父组件发送的方法 方法二:父组件调用子组件方法 子组件: 父组件: 以上这篇Vue父组件调用子组件事件方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希