这是否完全意味着将其视为“只读”?
例如,如果状态为:
{
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}对于这四个没有变化的状态,我们...
references