首页 > 解决方案 > 使用 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

标签: reactjsreduxreact-reduximmer.js

解决方案


我试试

    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);

推荐阅读