当我们说不能在Redux reducer中改变状态对象时,这是什么意思?

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

这是否完全意味着将其视为“只读”?

例如,如果状态为:

{
  arr: arrData,
  obj: objData,
  aMap: mapData,
  aSet: setData
}

对于这四个不变的任何一个,我们可以将其保持不变,但是假设obj向下3级,即obj.b.c.d,并且此d指向一个数组,我们需要修改数组中的一个条目,那么我们需要复制该数组,修改条目,然后让新状态引用它吗?但是,如果d指向一个新数组,则c需要一个新的d,因此c需要一个新的对象,并且出于同样的原因,我们最终需要一个新的b ,新的obj

就这样

let objNew = {
  ...obj,
  b: {
    ...obj.b,
    c: {
      ...obj.b.c,
      d: [...obj.b.c.d]
    }
  }
};

objNew.b.c.d[someIndex] = someNewValueOrObj;

现在可以返回objNew,并且未以任何方式修改旧状态(仅在读取它的情况。)>

因此,如果prevState是旧状态,而state是新状态,我们只需要确保在返回新状态之前,对于prevState,如果我们要转储所有值,它与传入的内容保持不变,而新状态将转储我们新状态的值。

这是否完全意味着将其视为“只读”?例如,如果状态为:{arr:arrData,obj:objData,aMap:mapData,aSet:setData}对于这四个没有变化的状态,我们...

redux immutability redux-reducers
1个回答
0
投票
Redux使用浅层相等性来检查状态是否已更改以触发React中的渲染。如果对新状态的

references

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