以下对象action.data
有一个嵌套对象address
{
name: 'Ben',
address: {
country: 'Australia',
state: 'NSW'
}
}
我应该如何在减速机中处理它?</ p>
const rootReducer = (state = initState, action) {
switch(action.type) {
switch RECEIVE_DATA:
return {...state, data: action.data}
}
}
我可以像上面那样做吗?我只是将整个对象分配给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}
}
}
或者我应该对该对象进行深层复制并将其分配给data
?
感谢
答案 0 :(得分:17)
&#34;正确&#34;处理嵌套数据更新的方法是使用多个浅拷贝,每个嵌套级别一个。根据你的第一个例子,创建一个完全替换一个字段的新对象当然也可以。
请参阅Immutable Update Patterns上的Redux文档部分,了解有关如何正确执行不可变更新的一些信息,以及avoiding deep cloning上的Redux常见问题解答条目。
答案 1 :(得分:11)
来自Redux:
Common Redux误解:你需要深度克隆状态。现实:如果里面的东西没有改变,保持它的参考相同!
答案 2 :(得分:0)
不,浅表未更改的属性。
更改后的属性无论如何都是新值,因此复制类型没有问题。
在代码中,我们像这样return {...prevState}
答案 3 :(得分:0)
如果你只更改数组中的一项,Redux 文档说你可以使用 array.map,但如果你知道索引,这会更快:
state[action.args.index] = {
...state[action.args.index],
disregardLeafNode: action.args.checked
}
return state