【问题标题】:Update immutable state with Redux使用 Redux 更新不可变状态
【发布时间】:2019-01-10 13:49:54
【问题描述】:

我正在使用 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;
}

【问题讨论】:

  • 你已经用 immutable.js 标记了这个问题,但似乎使用的是 ES6 扩展运算符,而不是 immutable.js 提供的任何出色的嵌套结构更新功能
  • 我会推荐 icepick 库。

标签: reactjs redux react-redux immutable.js


【解决方案1】:

您正在使用 ES6 扩展运算符,这还不错,但是在使用嵌套对象时它开始变得烦人。我的建议是试试immer,它会让你的生活更轻松!!!

【讨论】:

    【解决方案2】:

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

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

    另外。一次更新不同的密钥。我写了一个包装函数来做。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-12
      • 1970-01-01
      • 2016-06-11
      • 2016-11-10
      • 1970-01-01
      相关资源
      最近更新 更多