我应该如何修复 TypeError “属性‘props’未定义”?
2017-07-03
153
当我点击按钮 [添加到购物车] 时,我收到一个错误:
。
我该如何解决这个问题?
这是我的
完整代码链接
,下面是与问题相关的摘要:
class ProductsList extends Component {
....
renderProductsList() {
function mapProductCards(elem) {
return (
<Card className="m-1" style={{width: '18rem'}} key={elem.id}>
....
<CardText>isAvailable</CardText>
<Button onClick={() => this.props.addItemToCart(elem.id)}>Add to Cart</Button>
</CardBlock>
</Card>
)
}
....
this.props.products ....
.map(mapProductCards)
....
const mapDispatchToProps = (dispatch) => ({
....
addItemToCart(value) {
dispatch(addToCart(value));
}
....
});
export default connect(mapStateToProps, mapDispatchToProps)(ProductsList);
....
2个回答
在 renderProductsList 函数的开头,将
this
变量分配给本地变量。如下所示:
renderProductsList() {
var that = this;
function mapProductCards(elem) {
return (
然后在需要的地方使用
that
。例如,您的按钮现在将是:
<Button onClick={() => that.props.addItemToCart(elem.id)}>Add to Cart</Button>
或者,改用箭头函数。如下所示:
renderProductsList() {
mapProductCards = (elem) => {
return (
这将保留
this
对您实际需要的对象的引用。
编辑
查看完整代码后,根据您使用
mapProductCards
函数的方式,您需要传入正确的对象作为
this
。您可以将该对象作为第二个参数传递给
map
。像这样:
this.props.products.map(mapProductCards, this);
var new_array = arr.map(function callback(currentValue, index, array) { // Return element for new_array }[, thisArg])
thisArg: Optional. Value to use as this when executing callback.
Chris
2017-07-03
我也遇到过这个问题,问题是当我调试代码时,本地 this 即函数的 this 对象给出了未定义的对象。您需要实例化函数 addItemToCart 的这个对象,因为当您单击按钮时,它会在控制台上显示一个错误,提示
您的方法 addItemToCart 未定义 为了解决这个问题,您需要将本地 this 定义为
renderProductsList() {
var localThis= this;
}
然后以
onClick={() => localThis.props.addItemToCart(elem.id)}
如果您在循环中使用函数,比如 map,那么您需要执行
this.state.map(function(){
},**this**)
以保留此
Vikram Saini
2017-07-03