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

如何在React类组件中实现GraphQL API数据访问

类组件接入GraphQL(Apollo Client)实现方法

你代码中使用的useQuery是Apollo Client面向函数组件提供的Hook API,类组件无需手动封装请求逻辑,直接使用Apollo内置的Query渲染属性组件即可实现完全一致的效果。

方法1:使用Query渲染属性组件(推荐)

先从依赖包中引入Query组件,将你定义的GraphQL查询语句作为query属性传入,组件的子元素是一个渲染函数,入参结构和useQuery返回值完全一致,包含loading/error/data三个核心状态,直接复用你原有的判断和渲染逻辑即可:

import React from 'react';
import { Query } from '@apollo/client';
// 按你项目原有路径引入CURRENCIES查询、Loader组件

class LinkList extends React.Component {
  render() {
    return (
      <Query query={CURRENCIES}>
        {({ loading, error, data }) => {
          if (loading) return <Loader />;
          if (error) return <pre>{error.message}</pre>;

          return (
            <div className="options">
              {data.currencies.map((currency) => {
                return (
                  <button
                    key={currency}
                    id={currency}
                    className="option"
                  >
                    {currency.symbol}
                    {currency.label}
                  </button>
                );
              })}
            </div>
          );
        }}
      </Query>
    );
  }
}

export default LinkList;

如果你使用的是v3版本之前的旧版react-apollo,只需要把Query的引入路径从@apollo/client换成react-apollo即可,API完全不变。

方法2:使用withQuery高阶组件

如果更习惯传统类组件的props获取数据模式,可以用withQuery高阶组件包裹类组件,查询状态会自动注入到组件props中:

import React from 'react';
import { withQuery } from '@apollo/client';
// 按你项目原有路径引入CURRENCIES查询、Loader组件

class LinkList extends React.Component {
  render() {
    const { loading, error, data } = this.props;
    if (loading) return <Loader />;
    if (error) return <pre>{error.message}</pre>;

    return (
      <div className="options">
        {data.currencies.map((currency) => {
          return (
            <button
              key={currency}
              id={currency}
              className="option"
            >
              {currency.symbol}
              {currency.label}
            </button>
          );
        })}
      </div>
    );
  }
}

export default withQuery(CURRENCIES)(LinkList);

两种写法运行效果完全一致,渲染属性写法灵活度更高,高阶组件写法类组件结构更清晰,按需选择即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 00:30:57