Relay Modern 新特性

Relay Modern 的改进和新功能的总结。.

兼容模式 #

兼容模式 允许在现有的 Relay 应用程序中逐步采用 Relay Modern API。与 Relay Classic 相比,此方法实现了以下功能:

  • 更简单,更可预测的 mutation API。 Relay Classic 对 mutation 查询的限制也已经移除,查询是静态的,mutation 字段可以任意嵌套,并且可以使用任意参数。
  • 使用 QueryRenderer 的时候会删除对Relay Classic的查询限制:查询可能包含使用任意参数的多个根字段,并返回单个值或复合值。 viewer root 字段现在是可选的。
  • 路由现在是可选的: QueryRenderer 可以在不定义路由的情况下使用。 更多请查看 routing 指南
  • QueryRenderer 支持直接呈现少量数据,而不是要求容器访问数据。 容器 是可选的,可以用于您的应用程序的大小和复杂性增加时。
  • API 总体上更简单,更可预测。

Modern 运行时 #

对于已经完全转换为兼容 API的新的 Relay 应用程序或现有应用程序,可以启用 Relay Modern 运行时以激活更多功能。除了上述内容之外,还包括:

性能 #

新的 Relay Modern 心比以前的版本更轻巧,更快。它被重新设计为使用静态查询,这使我们能够更多的工作来构建/编译时间。由于删除了动态查询所需的大量复杂功能,现代核心的体积要小得多。 新的 Relay Modern 核心比以前的版本更轻量且明显更快。它被重新设计以使用静态 query,这使我们能把更多工作搬到建置/编译期。由于删除了动态 query 所需的大量复杂功能,Modern 核心比之前的小得多。新的核心使用在构建时期间产生的优化解析指令集,在处理响应上也快了一个数量级。我们不再追踪产生动态查询所需的信息,这大幅地减少了使用 Relay 的内存开销。这意味着有剩下更多内存来让 UI 响应更流畅。Relay Modern 也支持持久查询,将请求的上传大小从完整查询文本减少到简单的id。

更小的 Bundle #

Relay 运行的 bundle 大约是 Relay Classic 的20%

垃圾回收#

运行时自动删除不再引用的缓存数据,有助于减少内存使用。

GraphQL Subscriptions和实时查询 #

Relay Modern 支持GraphQL Subscriptions,使用命令式更新API来允许在收到有效负载时对存储进行修改。它还通过轮询为GraphQL Live查询提供实验支持。

可注入的自定义字段处理程序 #

一些字段 - 特别是分页数据的字段 - 可能需要在客户端进行后处理,以便将先前获取的数据与新信息进行合并。Relay Modern支持自定义字段处理程序,可用于处理这些字段以处理各种分页模式和其他用例。

更简单的 Mutation API #

我们已经得到的很多问题领域是 mutation 及其配置。 Relay Modern 推出了一种新的 mutation API 允许以更直接的方式更新记录和字段。

客户端 Schema 扩展 (实验性的) #

The Relay Modern 核心增加了对客户端 schema 扩展的支持。 这允许 Relay 方便地从服务器获取的数据存储一些额外的信息,并且像从服务器提取的任何其他字段一样呈现。这应该能够替代以前需要一个Flux / Redux存储的一些用例。

Flow 类型 生成 #

Relay Modern具有自动Flow类型生成,用基于GraphQL schema Relay 容器中使用的片段。 使用这些 Flow 类型帮助使应用程序更不容易出错, 确保所有可能是 nullundefined 的状况都被考虑到,即使它们并不经常发生。

更少的路由要求 #

路由不再需要了解Relay Modern中查询 root 的任何内容。 组件可以在任何地方包裹在一个 QueryRenderer。这应该在选择路由框架时带来更多的灵活性。

可扩展的核心 #

Relay Modern 的核心本质上是一个为 GraphQL 数据准备的标准存储。它可以被独立用于渲染 使用 React 的视图,也可以被扩展和其他框架一起使用。