Wener笔记故事指南
- apollographql/apollo-client
- MIT, TS
- npm:@apollo/client
- ApolloClient
- link - 通信层
- cache - 泛化缓存层
- fetch 策略
- 'cache-first' | 'network-only' | 'cache-only' | 'no-cache' | 'standby'
- WatchQueryFetchPolicy = FetchPolicy | 'cache-and-network'
- ErrorPolicy = 'none' | 'ignore' | 'all'
- 注意
- ⚠️ 不支持 fast refresh、不支持 suspense
- issues 里不少影响使用的问题 - 开发不太活跃
- apollo 比较大 - bundle 可能 50k+
- notifyOnNetworkStatusChange 默认关闭
- errorPolicy 默认 none - runtime error
- 优势
- 泛化缓存
- mutation 自动失效 - 不一定准
- 数据字段存在不会再次查询 - 比 react query 基于 key 的模式粒度更细
- devtools - 集成 iql,能直接查询可直观的看到 gql,能看泛化后的缓存数据
- 个人感受
- retry 通过 link 实现 - 相对麻烦
- Devtools
- 似乎对 hmr/fast refresh 支持不好
- 无法失效数据 - 数据没有状态概念 - 因为没有单次查询概念
- 查询要写 displayName - 否则不方便看
- 参考
- React Query vs Apollo
- 劣势
- Devtools - 非 web 集成 - 使用没有 react query 的方便
- Lagged Query Data - react query 支持直接返回上次数据 - apollo 3 后添加了 previousData
- Render Optimization - react query 会优化状态变触发的 rerender - 可以选择性的部分状态从新渲染
- Auto Garbage Collection
- apollo 手动 gc
- react query 因为有 mount 概念,可以自动 gc 不用数据
- Stale While Revalidate
- Partial Query Matching
- react query 有 key 概念,数组可以部分匹配
- Stale Time 配置
- Pre-usage Query/Mutation Configuration - 每次使用独立配置
- Window Focus Refetching - 窗口获取焦点自动刷新
- Suspense - apollo 不支持 - #162
- GraphQL Concepts Visualized