首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用immer.js以不可变的方式更新数组中的一个对象

使用immer.js以不可变的方式更新数组中的一个对象
EN

Stack Overflow用户
提问于 2020-07-27 17:59:47
回答 2查看 763关注 0票数 0

假设我有一些初始状态,比如

代码语言:javascript
复制
      const initialState = {
        post: { comments: {
           {0: {id:'1',name:'myname',statusdata: false}},
           {1: {id:'2',name:'yourname',statusdata: true}}, 
      },
   };

我想要作为操作的结果添加到数据中,但我想添加的数据将是一个数组。我该怎么做呢?

代码语言:javascript
复制
     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);

我有这个错误

代码语言:javascript
复制
Error: [Immer] Immer only supports setting array indices and the 'length' property
EN

回答 2

Stack Overflow用户

发布于 2020-07-27 18:35:32

我对commentsaction.payload的模式做了一些假设。尝试以下解决方案。

代码语言:javascript
复制
Object.values(draft.post.comments).map((comment){   
   if(comment.id == action.payload.id){
       const updatedComment = Object.extend({}, comment, {"name": action.payload.name});
       return updatedComment;
   }
   return comment;
})
票数 0
EN

Stack Overflow用户

发布于 2020-07-28 06:09:55

我在努力

代码语言:javascript
复制
    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);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63112934

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档