
Apollo GraphQL发布了Apollo Client 4.0,这是一个重大版本更新,带来了更精简的架构、更紧密的 TypeScript 集成、框架无关的 API 和更模块化的特性选择,所有这些功能都是为了减少包的大小并改善开发者的体验。
其中一个主要变化是支持按需包含特性。像本地状态管理(@client 指令)和默认的 HTTP 链接这样的特性,除非明确导入,否则不会再打包进来。结合现代化的目标转译(面向 2023 年以后的浏览器和 Node.js 20+)、更好的 ESM 支持和改进的树摇(tree-shaking)优化,许多用户应该能看到来自 Apollo Client 的包的大小减少了20-30%。
在TypeScript方面,4.0 引入了 colocated/namespace 类型(例如useQuery.Options
和useQuery.Result
)、对必需变量更严格的限制、新的dataState
属性来区分查询状态(empty、partial、streaming 和 complete)以及模块增强以自定义上下文类型,而不是使用脆弱的泛型。这些变化旨在减少类型错误并提高日常使用中类型的可发现性。
此外,错误处理也得到了改进。单一的 ApolloError 已被替换或分解为更具体的错误类,允许更清晰的区分(GraphQL vs 网络 vs 解析),并引入了新的静态.is()
类型检查方法以帮助缩小范围。
核心库已经与 React 解耦。针对 React 的导出现在位于@apollo/client/react
中。这使得在使用 React 钩子与使用非 React 环境中的核心 GraphQL 客户端逻辑时更加清晰,并减少了在非 React 环境使用时的不必要依赖。
社区的早期反馈是积极的。一位用户在 X 上分享说:“到目前为止,这对我们团队来说太棒了”,这是他对 GA 版本发布帖子的回应。
在 Reddit 上,一位评论者询问从 v3 迁移到 v4 的类型时所推荐的方式,维护者的回应指向了迁移指南,并给出了以下建议:
总的来说,我们不推荐使用生成的钩子,并鼓励使用 TypedDocumentNode 代替,要么通过设置 typed-document-node 代码生成插件,要么通过使用客户端预设,但配置要进行修改。
对于考虑迁移的团队,Apollo 提供了详细的迁移指南。关键的破坏性变化包括更新 React 与核心使用的导入、适应新的 dataStateAPI、处理错误类变化,并引入RxJS作为同级依赖。
有一个可用的代码修改工具,作者声称只需在项目中运行以下命令,就能在几分钟内完成 90%的迁移:
Apollo Client是由 Apollo GraphQL 维护的开源 GraphQL 客户端。它为 JavaScript 和 TypeScript 应用程序提供了管理查询、缓存、变更和订阅的工具,为 React 提供直接的支持,并集成到了范围广泛的框架中。
原文链接:
Apollo GraphQL Client 4.0 Released with Leaner Bundles and Strengthened TypeScript Safety
评论