不使用展开运算符无法更改对象属性

问题描述 投票:0回答:1

我通过 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方法中我们也不能更改对象,为什么我们必须将对象复制到更新后的值?

reactjs redux react-redux redux-toolkit
1个回答
0
投票

我认为这是因为 Redux 遵循不变性原则,也就是说,当你直接改变 action.payload 对象时,你应该总是返回一个新的状态,而不是对现有状态进行更改,你违反了这个原则,但是当您使用展开运算符时,您正在创建一个新对象,该对象是 action.payload 的副本,然后根据 Redux 的不变性原则更新 cartQuantity 是正确的。

© www.soinside.com 2019 - 2024. All rights reserved.