如何在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
相关产品推荐
相关产品推荐

