管理本地状态
与 Apollo 客户端的本地数据交互
在其核心中,Apollo 客户端 是一个使用 状态管理库,恰好使用 GraphQL 与远程服务器交互。自然地,某些应用程序状态不需要远程服务器,因为它是完全局部的。
Apollo 客户端 使您能够管理和跟踪远程获取的状态,这意味着您可以使用单个 API 与应用程序的 所有 状态进行交互。
它的工作原理
您可以根据需要(如在localStorage
或 Apollo 客户端缓存中)存储应用程序的本地状态。然后,当您对特定的 字段 进行 查询 时,Apollo 客户端将使用您定义的逻辑来获取和填充这些本地数据。您甚至可以在相同的查询中包含本地和远程获取的 字段:
为了支持这一流程,Apollo Client 3 引入了两套互补机制来管理本地状态:字段策略和响应式变量。
* Apollo Client 之前版本中的本地解析器 API仍然可用,但已弃用。使用此 API 时可能需要进行一些额外操作,例如,在远程字段缓存的@client(always:true)
指令之后会重新计算本地字段解析器。
字段策略和仅本地字段自3.0
字段策略允许您定义查询特定字段时会发生什么,包括在您的 GraphQL 服务器模式中未定义的字段。通过为这些仅本地字段定义字段策略,您可以使用存储在任何地方的数据填充它们,例如localStorage
或响应式变量。
单个 GraphQL 查询可以包含仅本地字段和远程检索字段。在每个仅本地字段的策略中,您指定一个函数,该函数定义该字段的值如何填充。
响应式变量自3.0
响应式变量允许您在应用程序的任何地方读取和写入本地数据,而不需要使用 GraphQL 操作来执行此操作。字段策略可以是一个响应式变量,用来填充字段的当前值。
响应式变量不在 Apollo Client 缓存中存储,因此它们不需要符合缓存类型的结构。您可以在它们中存储任何想要的内容。
每当响应式变量的值发生变化时,Apollo Client会自动检测到这种变化。任何依赖已更改变量的活动查询的字段都会自动更新。
本地解析器自2.5
在 Apollo Client 的早期版本中,您通过定义本地解析器来填充和修改仅本地字段。这些解析器在结构和目的上与您的 GraphQL 服务器定义的解析器类似。
此功能在 Apollo Client 3 中仍然可用,但在未来的主要版本更新中将被迁移出核心模块。