reactjs - 使用 immer.js 以不可变的方式更新数组中的一个对象
问题描述
假设我有一些初始状态,例如
const initialState = {
post: { comments: {
{0: {id:'1',name:'myname',statusdata: false}},
{1: {id:'2',name:'yourname',statusdata: true}},
},
};
我想作为操作的结果添加到数据中,但我想添加的数据将是一个数组。我该怎么做?
export default produce((draft, action) => {
switch (action.type) {
case UPDATE_NAME:
draft.posts.comments.name = action.payload;
break;
case CHANGE_STATUS:
draft.posts.comments.statusdata = !action.payload;
break;
default:
}
}, initialState);
我有这个错误
Error: [Immer] Immer only supports setting array indices and the 'length' property
解决方案
我试试
export default produce((draft, action) => {
switch (action.type) {
case CHANGE_STATUS:
draft.posts.comments[
draft.posts.comments.findIndex(i => i.id === action.payload)
].statusdata = action.payload;
return draft;
default:
}
}, initialState);
推荐阅读
- intellij-idea - 有没有办法让 IDE(IntelliJ、PyCharm、VS Code)弹出更少但仍然可以完成?
- r - 如何使用 R 对数据进行反排序
- node.js - 如何检查加密模块的版本?
- python - Python海龟鼠标不直接跟随
- php - 按降序 SQL 对表进行排序
- api - Google Vision 文本检测返回过多不必要的数据
- firebase - 持久化用户身份验证 Flutter Firebase
- python - dask、joblib、ipyparallel 和其他用于尴尬并行问题的调度程序
- awk - 如何获得文件名的 md5sum 值
- c++ - Qt 5.12.0 MinGW 7.3 w64 从 windows 64 交叉编译到 windows x86