首页 > 解决方案 > 使用 Redux 更新不可变状态

问题描述

我正在使用 Redux 来更新我的不可变状态。我想通过简单地定位 list[] 来更新减速器中的嵌套对象数组,因为我需要用新对象更新它。我的第一个项目 (board1) 列表在我调度操作时确实会更新,但是一旦我调度下一个项目 board2 及更高版本,它们会覆盖我的状态并返回单个项目。您的帮助将不胜感激.. 谢谢

const initialState = {
  board: [
    { boardId: 1, boardname: "board1", list: [] },
    { boardId: 2, boardname: "board2", list: [] }
  ]
};

export default function(state = initialState, action) {
  switch (action.type) {
    case "ADD_LIST":
      state = {
        ...state.board,
        board: [
          ...state.board[action.payload.boardId - 1],
          {
            ...state.board[action.payload.boardId - 1],
            list: [
              ...state.board[action.payload.boardId - 1].list,
              {
                listId: state.board[action.payload.boardId - 1].list.length + 1,
                listname: action.payload.listname
              }
            ]
          }
        ]
      };
      break;
    default:
      break;
  }

  return state;
}

标签: reactjsreduxreact-reduximmutable.js

解决方案


我的选择是使用不可变的 dotprop。

https://github.com/debitoor/dot-prop-immutable

此外。用于一次更新不同的密钥。我写了一个包装函数来做到这一点。


推荐阅读