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

Redux 循环执行dispatch操作时如何存储接口返回的id数组

问题修复方案

核心错误点

你的问题出在reducer的PUSH_ID_IMAGE分支逻辑:你每次dispatch传入的payload是单条图片ID值,不是数组,直接对单个ID用扩展运算符(...)属于非法用法,既会报错也无法实现ID追加存储的需求。

1. 修正reducer代码

将新ID追加到原有images数组末尾即可,注意要先给reducer设置初始状态,保证images默认是空数组:

const initialState = {
  // 其他原有状态
  images: []
}

// case分支修改为:
case "PUSH_ID_IMAGE":
  return {
    ...state,
    images: [...state.images, action.payload]
  }

2. 修正并优化action代码

你原有代码中async关键字位置错误,且没有上传异常捕获逻辑,同时循环并行请求无法保证ID存储顺序和上传顺序一致,可参考以下优化后的写法:

export function uploadImage(files) {
  // async关键字要放在function前面,原有写法语法错误
  return async function(dispatch) {
    const myHeaders = new Headers();
    myHeaders.append("Authorization", `Token ${localStorage.getItem('***')}`)
    // 用for of配合await保证上传和ID存储顺序和选择文件顺序一致
    for (const file of files) {
      try {
        const formdata = new FormData();
        formdata.append("image", file, file.name);
        const resp = await fetch(`${process.env.REACT_APP_URL_API}/api/images/`, {
          method: "POST",
          headers: myHeaders,
          body: formdata,
          redirect: 'follow'
        })
        const json = await resp.json()
        dispatch(activeImage(json.id))
      } catch (err) {
        // 可自行添加上传失败的业务处理逻辑
        console.error('图片上传失败', err)
      }
    }
  }
}

export const activeImage = ( id ) => ({
  type: "PUSH_ID_IMAGE",
  payload: id
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 03:15:03