What Apollo Client Does
- Normalized cache — entities deduped by
__typename:id - Query hooks —
useQuery,useMutation,useSubscription,useLazyQuery,useFragment - Optimistic UI — local cache updates before server confirms
- Pagination — fetchMore with offset or cursor-based
- Local state — client-side schema and resolvers
- SSR — server-rendered queries with hydration
- Subscriptions — GraphQL subscriptions via WebSocket
- Codegen — TypeScript types from schema
Architecture
Queries execute through a link chain (auth, error, retry, http). Responses are normalized into the InMemoryCache. Components subscribe to cache via hooks and re-render on cache changes. Mutations can update cache via refetchQueries, update(), or optimistic responses.
Self-Hosting
Client-only library.
Key Features
- Normalized caching by
__typename:id - Optimistic UI updates
- Pagination helpers
- Local state management
- SSR support
- WebSocket subscriptions
- Apollo DevTools browser extension
- Multi-framework (React, Vue, Angular)
- TypeScript codegen integration
Comparison
| Client | Cache | Type Safety | Bundle | Subscriptions |
|---|---|---|---|---|
| Apollo Client | Normalized | Codegen | ~32KB | Yes |
| URQL | Document | Codegen | ~10KB | Yes |
| Relay | Normalized + compiler | Compile-time | ~20KB | Yes |
| TanStack Query + gql | Document | Manual | ~12KB | Manual |
| SWR + gql | Document | Manual | ~5KB | Manual |
常见问题 FAQ
Q: Apollo vs URQL? A: Apollo 功能最全、缓存最智能,但 bundle 较大。URQL 更轻、API 更简,适合小型应用。
Q: 没有 GraphQL Server 能用吗?
A: 能。apollo-link-rest 可以把 REST 接口包装成 GraphQL;或者用 Apollo 客户端状态管理本地数据。
Q: 需要 codegen 吗?
A: 强烈建议。graphql-codegen 从 schema 和 operations 生成类型,杜绝运行时类型错误。
来源与致谢 Sources
- Docs: https://www.apollographql.com/docs/react
- GitHub: https://github.com/apollographql/apollo-client
- License: MIT