You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Redux嵌套状态中仅更新bookmarks.IDs.posts数组?

如何在Redux状态中仅更新bookmarks.IDs.posts数组?

你原来的写法会丢失bookmarks里的其他嵌套属性,因为对象展开运算符(...)只做浅层复制,直接替换整个bookmarks对象会把原本的data、isFetching、fetchingError以及IDs里的news、opps都覆盖掉。要只更新posts数组,需要逐层保留未修改的嵌套属性,同时替换目标数组,正确的写法应该是这样:

case 'SET_USER_BOOKMARKED_POSTS':
  return {
    ...state, // 保留state里的其他属性(id、role、membership)
    bookmarks: {
      ...state.bookmarks, // 保留bookmarks里的原有属性(data、isFetching、fetchingError)
      IDs: {
        ...state.bookmarks.IDs, // 保留IDs里的news和opps数组
        posts: action.payload // 只更新posts数组
      }
    }
  };

简单解释一下逻辑:

  • 第一层...state:确保state里的id、role、membership这些非bookmarks的属性完全保留
  • 第二层...state.bookmarks:保留bookmarks对象里原本的data、isFetching、fetchingError属性,不会被覆盖
  • 第三层...state.bookmarks.IDs:保留IDs对象里的news和opps数组,只把posts替换成新的action.payload

这样就能保证只有bookmarks.IDs.posts被更新,其他所有状态都保持不变,符合Redux不可变状态的要求。

内容的提问来源于stack exchange,提问作者grazdev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:51:12