我正在尝试在Redux中更新嵌套对象,但是我不确定我是否做得正确。由于在reducer中存在语法错误,因此下面提供的代码无法编译。

我知道这不是正确的语法,因为action.payload前面没有键,但是我对将action.payload合并到[action.id]中的方法迷失了。

我试图避免为需要更新的每个键创建单独的操作(例如updateBlockTypeupdateBlockTitleupdateBlockDescription等)

调度:

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.blocksstate.blocks.hash。如果初始状态未定义这些键,则可能会引发错误。这是组成复杂的异径管的另一个原因。

关于javascript - 在Redux中更新多个值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51273195/

10-12 00:51