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

如何将GraphQL服务器返回的数组数据展示到React-Table中

解决Apollo Client获取数组数据并展示到React-Table的问题

没问题,我来帮你搞定这个数组数据展示的问题!其实核心就是把GraphQL返回的数组直接传给React-Table的data属性,和你处理单个对象的逻辑类似,只是不用再手动把单个对象包装成数组了。我给你修改代码演示一下:

第一步:调整GraphQL查询(以玩具列表为例)

先把你的查询改成返回数组的形式,比如:

const queryToyList = gql`
  query {
    toys { # 这里toys是数组类型的返回结果
      id
      title
      # 其他你需要的字段,比如价格、分类等
    }
  }
`

第二步:修改表格列配置

对应玩具的字段,调整columns数组:

const columns = [
  { Header: "玩具ID", accessor: "id" },
  { Header: "玩具名称", accessor: "title" }
  // 可以添加更多列,对应你查询的其他字段
]

第三步:修改Table组件的渲染逻辑

这里关键要处理异步加载的状态(避免请求未完成时data为空导致报错),并且直接使用返回的数组:

class Table extends React.Component {
  render() {
    const { data, loading, error } = this.props;
    
    // 处理加载中状态
    if (loading) return <div>加载中...</div>;
    // 处理查询错误状态
    if (error) return <div>查询出错:{error.message}</div>;

    // 直接把GraphQL返回的数组传给React-Table的data属性
    return (
      <div>
        <h2> 玩具列表 </h2>
        <ReactTable 
          data={data.toys} // 这里toys是GraphQL返回的数组
          columns={columns} 
          defaultPageSize={10} 
        />
      </div>
    );
  }
}

第四步:关联查询和组件

最后把查询和组件绑定:

const ToyListWithData = graphql(queryToyList)(Table);

export default ToyListWithData;

补充说明

你之前处理单个account对象时,需要把它放到数组里([{ firstName: data.account.firstName... }]),因为React-Table要求data必须是数组格式。而当查询返回的本身就是数组(比如data.toys),直接传这个数组就满足React-Table的要求了,不需要额外包装。

另外,加上loading和error的判断非常重要,不然在请求还没完成的时候,data可能是undefined,会导致组件报错哦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:25:51