我正在尝试在Redux中更新嵌套对象,但是我不确定我是否做得正确。由于在reducer中存在语法错误,因此下面提供的代码无法编译。
我知道这不是正确的语法,因为action.payload
前面没有键,但是我对将action.payload合并到[action.id]中的方法迷失了。
我试图避免为需要更新的每个键创建单独的操作(例如updateBlockType
,updateBlockTitle
,updateBlockDescription
等)
调度:
this.props.dispatch(updateBlock(this.props.id, { type: e.currentTarget.id }))
行动:
export function updateBlock (id, values) {
return {
type: 'UPDATE_BLOCK',
id: id,
payload: values
}
}
减速器:
case 'UPDATE_BLOCK':
return {
...state,
blocks: {
...state.blocks,
byHash: {
...state.blocks.byHash,
[action.id]: {
...state.blocks.byHash[action.id],
action.payload <-- How do I merge the payload?
}
}
}
}
byHash [id]对象:
'1': { id: 1, type: 'INTRO', title: 'Some title...', description: 'Some description...' }
我构造我的减速器的方法可能是错误的,因此我对应该如何解决这个问题持开放态度。
最佳答案
您错过了散布运算符:...action.payload
它将散布作为对象的有效负载的属性到化简器中的对象条目
如果结构变得更复杂,最好将还原器组成子还原器,然后将它们与redux中的thr combineReducers
api合并。
另外,您正在减速器中访问state.blocks
和state.blocks.hash
。如果初始状态未定义这些键,则可能会引发错误。这是组成复杂的异径管的另一个原因。
关于javascript - 在Redux中更新多个值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51273195/