我通过 redux-toolkit 管理购物车操作。在将对象添加到状态之前,我需要更改对象的
cartQuantity
。
我试图通过以下代码来做到这一点:
reducers: {
addToCart(state, action) {
if(state.length == 0) {
action.payload.cartQuantity = action.payload.cartQuantity + 1
state.push(action.payload);
}
}}
但它可以通过扩展运算符以以下方式进行更改:
reducers: {
addToCart(state, action) {
if(state.length == 0) {
const updatedPayload = {
...action.payload,
cartQuantity: action.payload.cartQuantity + 1
};
state.push(updatedPayload);
}
}}
为什么即使在reducer方法中我们也不能更改对象,为什么我们必须将对象复制到更新后的值?
我认为这是因为 Redux 遵循不变性原则,也就是说,当你直接改变 action.payload 对象时,你应该总是返回一个新的状态,而不是对现有状态进行更改,你违反了这个原则,但是当您使用展开运算符时,您正在创建一个新对象,该对象是 action.payload 的副本,然后根据 Redux 的不变性原则更新 cartQuantity 是正确的。