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

React/Redux新手求教:如何在Reducer中更新对应文档状态

解决方案

首先需要明确你的state.documents是对象结构(键为文档ID)还是数组结构,两种情况的处理方式如下:

情况1:state.documents是对象结构(推荐的Redux存储方式)

如果你的文档列表是以ID为键的对象(比如{ "docId1": { id: "docId1", status: {...}, ... }, ... }),可以这样实现:

updateDocumentStatus: (
  state,
  action: PayloadAction<{ id: any; status: any }>,
) => {
  const { id, status } = action.payload;
  // 检查目标文档是否存在
  if (state.documents[id]) {
    // 合并原有status与新状态,避免覆盖其他状态字段
    state.documents[id].status = {
      ...state.documents[id].status,
      ...status
    };
  }
},

情况2:state.documents是数组结构

如果文档列表是数组(比如[ { id: "docId1", status: {...}, ... }, ... ]),则用以下写法:

updateDocumentStatus: (
  state,
  action: PayloadAction<{ id: any; status: any }>,
) => {
  const { id, status } = action.payload;
  // 找到对应文档的索引
  const targetDocIndex = state.documents.findIndex(doc => doc.id === id);
  if (targetDocIndex !== -1) {
    // 合并状态,保留原有字段
    state.documents[targetDocIndex].status = {
      ...state.documents[targetDocIndex].status,
      ...status
    };
  }
},

关键说明

  • 使用...扩展运算符合并status是为了避免直接赋值覆盖原有状态中的其他字段(比如如果以后新增hasDownloaded这类状态,不会被丢失)。
  • 你的代码看起来是基于Redux Toolkit的createSlice实现的,内部Immer允许直接修改draft state,所以上述写法是合规的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 15:10:06