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

React中如何将API返回的多对象数组合并为单一数组

解决React中API返回多数组的合并问题

先修正API请求逻辑

你的原代码混用了async/await和.then,可读性差且逻辑冗余,同时请求头的Accept字段配置有误,先把这部分优化:

useEffect(() => {
  const fetchCompanyInfo = async () => {
    try {
      const response = await fetch(`/api/myapi_where=clientId=${idClient}`, {
        method: "GET",
        headers: {              
          "Accept": "application/json",
          "Content-type": "application/json"
        },
      });

      if (!response.ok) {
        throw new Error('请求企业信息失败');
      }

      // 获取API返回的原始数据(多个单元素数组组成的数组)
      const rawData = await response.json();
      // 后续在这里处理数组合并
    } catch (error) {
      console.error('请求出错:', error);
    }
  };

  fetchCompanyInfo();
}, [idClient]); // 必须添加idClient作为依赖,保证clientId变化时重新发起请求

合并多数组为单一对象数组

API返回的是由多个单元素数组组成的数组(形如[[{企业1}], [{企业2}], [{企业3}]]),你之前用setInfo.concat(setInfo)是把同一个数组和自身拼接,自然得到重复数据。以下三种方法都能实现正确合并:

方法1:使用flat()(最简洁)

flat()默认会将嵌套深度为1的数组扁平化,刚好匹配你的场景:

const mergedArray = rawData.flat();

方法2:使用展开运算符+concat

把每个子数组展开后再合并:

const mergedArray = [].concat(...rawData);

方法3:使用reduce遍历合并

手动遍历每个子数组,将元素累加到结果数组:

const mergedArray = rawData.reduce((result, currentArr) => {
  return result.concat(currentArr);
}, []);

最终完整代码

把合并后的数据存入state,就可以用map渲染列表了:

import { useEffect, useState } from 'react';

// 声明state存储合并后的企业列表
const [companyList, setCompanyList] = useState([]);

useEffect(() => {
  const fetchCompanyInfo = async () => {
    try {
      const response = await fetch(`/api/myapi_where=clientId=${idClient}`, {
        method: "GET",
        headers: {              
          "Accept": "application/json",
          "Content-type": "application/json"
        },
      });

      if (!response.ok) {
        throw new Error('请求企业信息失败');
      }

      const rawData = await response.json();
      // 合并数组
      const mergedArray = rawData.flat();
      // 更新state
      setCompanyList(mergedArray);
    } catch (error) {
      console.error('请求出错:', error);
    }
  };

  fetchCompanyInfo();
}, [idClient]);

// 渲染企业列表
return (
  <ul>
    {companyList.map(company => (
      <li key={company.id}>
        {company.name} - 创建于{company.creationDate}
      </li>
    ))}
  </ul>
);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 01:27:54