为什么改变我的状态的浅层副本被认为是可以的?

S. *_*enk 4 javascript reactjs redux

考虑以下:

    [SELECT]: (state, action) => {
      let newState = {...state, newState} 
      delete newState[action.payload.key]
      return(newState)
}
Run Code Online (Sandbox Code Playgroud)

为什么我可以改变浅拷贝,返回它并仍然满足不改变我的状态的规则?

Bra*_*don 5

这是可以接受的,因为(至少在您的示例代码中),变异位于浅层对象上,因此您不会修改任何其他代码当前所引用的对象.

这将被接受,使浅拷贝,然后修改一个嵌套的对象!关键是您要克隆对象树中要更改的深属性路径上的所有对象.

来自Redux FAQ:

重要的是要记住,每当更新嵌套值时,您还必须在状态树中返回其上方任何内容的新副本.如果您有state.abcd,并且想要对d进行更新,则还需要返回c,b,a和state的新副本.此 状态树变异图演示了树中深层变化如何需要一直变化.