在Redux中,是否有必要进行深层复制

Ben*_* Li 20 reactjs redux

下面的对象action.data有一个嵌套对象address

{
    name: 'Ben',
    address: {
        country: 'Australia',
        state: 'NSW'
    }
}
Run Code Online (Sandbox Code Playgroud)

我应该如何在减速机中处理它?

const rootReducer = (state = initState, action) {
    switch(action.type) {
        switch RECEIVE_DATA:
            return {...state, data: action.data}
    }
}
Run Code Online (Sandbox Code Playgroud)

我可以像上面那样做吗?我只是将整个对象分配给data没有复制?

要么

const rootReducer = (state = initState, action) {
    switch(action.type) {
        switch RECEIVE_DATA:
            const address = {...action.data.address}
            const data = {...action.data, address}
            return {...state, data}
    }
}
Run Code Online (Sandbox Code Playgroud)

或者我应该对该对象进行深层复制并将其分配给data?谢谢

mar*_*son 19

处理嵌套数据更新的"正确"方法是使用多个浅拷贝,每个嵌套级别一个.根据你的第一个例子,创建一个完全替换一个字段的新对象也是可以的.

有关如何正确执行不可变更新的一些信息,请参阅Redux文档有关不可变更新模式的部分,以及有关避免深度克隆的Redux FAQ条目.

  • 换句话说,做`return {... state,data:action.data}`很好. (5认同)

Emi*_*Emi 13

来自Redux:

常见的Redux误解:你需要深刻克隆状态.现实:如果内部的东西没有改变,保持其参考相同!