reactjs - 使用 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;
}
解决方案
我的选择是使用不可变的 dotprop。
https://github.com/debitoor/dot-prop-immutable。
此外。用于一次更新不同的密钥。我写了一个包装函数来做到这一点。
推荐阅读
- windows - 更改驱动器号后删除或重命名本地主机中的共享文件夹
- javascript - 有人可以用外行的方式向我解释这个折叠示例吗?
- swift - 如何在 Swift 中为仅部分矩阵可训练的 Tensorflow 创建卷积过滤器?
- python - Python 3.x Pycharm 下的空白打印,但 Atom 下的结果
- elasticsearch - Logstash:从 inout 或 putput 部分触发 python 脚本
- javascript - 我需要事务字段的文本作为通过 portlet 构建的 NetSuite 保存搜索中的变量
- javascript - 如何为我的 Javascript 代码添加平滑过渡?
- collections - 是否可以收集迭代器以向后填充集合?
- spring-boot - 无法使用 Spring 和 JPA 从 postgres 返回数据
- sql - 从 Teradata 中位置变化的字段中提取 ID(数字)