CodeRoadMap
首页路线题库资源库文章社区
CodeRoadMap

程序员的学习成长路线图。内容免费开放,登录后可同步路线图与课时进度。

由 程序员柏风 独立维护 · 关于作者

学习

  • 路线图
  • 课程
  • 面试题
  • 文章
  • 我

更多

  • 资源
  • 社区
  • 关于作者
  • 内容说明

© 2026 CodeRoadMap

津ICP备2026012044号-1·津公网安备12011002026155号·coderoadmap@126.com
React 生态进阶/课时/GraphQL 客户端
RawBlame
课时目录12 节

React 生态进阶

  1. 01React 生态地图
  2. 02客户端状态管理
  3. 03服务端状态与 TanStack Query
  4. 04Axios 与数据获取
  5. 05GraphQL 客户端
  6. 06UI 组件库
  7. 07动画与 Framer Motion
  8. 08E2E 测试
  9. 09React Native 概览
  10. 10表单与校验
  11. 11生态层性能
  12. 12综合练习

GraphQL 客户端

Apollo、Relay 概览。

30 分钟

GraphQL 客户端

REST 一资源一 URL;GraphQL 用单一 endpoint + 声明式查询,由客户端决定 要哪些字段。React 侧常见 Apollo Client、Relay(Meta 内部场景多);需先理解 schema,见 graphql-essentials。

学习目标

  • 说清 GraphQL 客户端在 React 中的职责
  • 对比 Apollo Client 与 Relay 的定位
  • 知道何时 REST + Query 比 GraphQL 更省事

客户端做什么

React 组件
  → useQuery / useMutation(Apollo)
  → HTTP POST /graphql
  → 缓存 normalized by __typename + id
  → UI 更新

与 REST 不同:同一次请求可拉 track + lessons + author 嵌套,减少 round-trip;代价是 缓存与类型生成 更复杂。

Apollo Client 概览

import { ApolloClient, InMemoryCache, gql, useQuery } from "@apollo/client";

const GET_TRACK = gql`
  query GetTrack($slug: String!) {
    track(slug: $slug) {
      title
      lessons { slug title }
    }
  }
`;

function TrackPage({ slug }: { slug: string }) {
  const { data, loading, error } = useQuery(GET_TRACK, { variables: { slug } });
  // ...
}

InMemoryCache 按 id 合并实体,列表页与详情页可共享同一条 track 记录。配合 Apollo DevTools 调试 cache。

适合:多客户端、字段需求差异大、已有 GraphQL 后端(如 Spring GraphQL,见 gql-spring)。

Relay 简览

  • 编译期:GraphQL 查询静态分析,生成类型与 runtime artifact
  • 强约定:connection、pagination、fragment colocation
  • 学习成本高,新项目非 Meta 栈较少首选
ApolloRelay
上手快陡
类型/codegen可选 graphql-codegen内置编译流
灵活度高规范强
典型团队中小全栈大型 FE 平台

与 TanStack Query 的关系

GraphQL 也可只用 fetch + Query,不用 Apollo——适合查询简单、不想引入 normalized cache。Apollo 优势在 复杂图、订阅、本地 state 与 remote 混合。

REST 项目继续 rxe-query 路线即可,不必为「时髦」上 GraphQL。

安全与性能提醒

  • 深度嵌套、无 pagination 的 query 易 N+1——后端见 gql-nplus1
  • 生产禁用未授权 introspection——见 gql-security

练习

  • 读 gql-schema,写一条含变量的 query
  • 对比同一「课程+课时列表」REST 几次请求 vs GraphQL 一次
  • 列出你的项目更适合 REST 还是 GraphQL 的两条理由

小结

GraphQL 客户端 = 查询 + 规范化缓存 + 与 schema 共生。 下一课 UI 组件库选型。

加载本节练习…
← 上一课Axios 与数据获取下一课 →UI 组件库