努力查看这两个摘要之间的区别:状态未设定handleAddItemToCart = (item) => { this.setState((state) => { const { cartItems } = state; item.quantity = 1; cartItems.push(item); return { cartItems }; }); }设置状态<...>return { cartItems: [...cartItems] }对我来说,这实际上不是问题,但我真的很想了解这里发生的事情-我误会了什么?
1 回答
慕雪6442864
TA贡献1812条经验 获得超5个赞
因为通过推送到数组,您可以同时更改先前状态和当前状态。尽管React不在乎,但是会这样做shouldComponentUpdate,因为您无法确定当前状态是否与之前的状态有所不同,因为您都对这两种状态进行了突变。
shouldComponentUpdate(nextProps, nextState) {
// does return false, although you mutated the state
return nextState.items !== this.state.items;
}
也就是说,防弹,完全不变的方式将是:
this.setState({ cardItems }) => ({ cartItems: [...cardItems, { ...item, quantity: 1 }] }));
添加回答
举报
0/150
提交
取消