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

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

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

学习

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

更多

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

© 2026 CodeRoadMap

津ICP备2026012044号-1·津公网安备12011002026155号·coderoadmap@126.com
GraphQL 入门/课时/Apollo Client
RawBlame
课时目录12 节

GraphQL 入门

  1. 01GraphQL 是什么
  2. 02Schema 与类型
  3. 03Query 与字段选择
  4. 04Mutation
  5. 05Resolver 模型
  6. 06Spring for GraphQL
  7. 07N+1 与 DataLoader
  8. 08Apollo Client
  9. 09GraphQL vs REST 选型
  10. 10GraphiQL 与 introspection
  11. 11安全与限流
  12. 12综合练习

Apollo Client

前端查询、缓存、与 Next.js 集成概念。

35 分钟

Apollo Client

Apollo Client 是 React 生态常用的 GraphQL 客户端:管理 Query/Mutation、规范化缓存、loading/error 状态。可与 react-essentials 组件模型、nextjs-essentials App Router 集成。

学习目标

  • 配置 ApolloProvider 与 HttpLink
  • 用 useQuery / useMutation 替代裸 fetch
  • 理解本站仍以 REST 为主、Apollo 用于实验页

核心内容

基本 setup

// lib/apollo-client.ts
import { ApolloClient, InMemoryCache, HttpLink } from "@apollo/client";

export const apolloClient = new ApolloClient({
  link: new HttpLink({ uri: process.env.NEXT_PUBLIC_GRAPHQL_URL ?? "/graphql" }),
  cache: new InMemoryCache(),
});
// app/lab/graphql/page.tsx(实验路由)
"use client";
import { ApolloProvider, useQuery, gql } from "@apollo/client";
import { apolloClient } from "@/lib/apollo-client";

const TRACKS = gql`
  query Tracks { tracks { slug title } }
`;

function TrackList() {
  const { data, loading, error } = useQuery(TRACKS);
  if (loading) return <p>加载中…</p>;
  if (error) return <p>{error.message}</p>;
  return (
    <ul>
      {data.tracks.map((t) => (
        <li key={t.slug}>{t.title}</li>
      ))}
    </ul>
  );
}

与 REST 三态模式相同;差异在缓存键由 slug 等字段自动归一化。

与 REST fetch 对照

生产课时页:

// 主路径 — REST
const res = await fetch(`${API}/tracks/${slug}/lessons/${lessonSlug}`);

不要把全站改为 GraphQL;实验页对比即可。Apollo 对 多视图共享 track 对象 有优势(详情/侧边栏同步更新)。

SSR 注意

Next.js RSC 默认服务端组件;Apollo 经典用法在 Client Component。RSC 可 fetch GraphQL POST 或使用 @apollo/experimental-nextjs-app-support(按版本选方案)。本站 MDX 课时渲染仍走 REST contentMd。

与 MongoDB 实验 API

若 lab Resolver 读 MongoDB 评论,Apollo 缓存 comment by id;REST 则用 SWR key /api/lab/comments?lesson=...。

练习

  • 用 useQuery 拉取单个 track(slug: "graphql-essentials") 含 lessons
  • 对比同数据用 的代码行数与缓存行为
fetch('/tracks/...')
  • 列出 2 条「本站不宜全站 Apollo」的理由
  • 小结

    Apollo = GraphQL 的前端数据层;CodeRoadMap 主 UI 继续 REST /tracks。 下一课 GraphQL vs REST 选型。

    加载本节练习…
    ← 上一课N+1 与 DataLoader下一课 →GraphQL vs REST 选型