跳至主要内容
版本:v18.0.0

组织变异、查询和订阅

Relay 操作(变异、查询和订阅)有严格的命名要求。操作名称必须以模块名称开头,并以 GraphQL 操作类型结尾。该名称还必须是全局唯一的。

旁注:这种命名方案起源于尝试强制执行唯一性约束。在 Meta,Haste(一个用于静态资源的依赖管理系统)强制执行所有模块名称都是唯一的,以便推导出合理的全局唯一 Relay 名称。将模块名称和 Relay 名称耦合也使得在知道该名称的情况下更容易找到片段/查询/变异。这在 Meta 中很有意义,但在 OSS 环境中可能不太合理。

例如

  1. 在文件 MyComponent.js 中的变异必须使用方案 MyComponent[MyDescriptiveNameHere]Mutation 命名。
  2. 在文件 MyComponent.react.js 中的查询必须使用方案 MyComponent*Query 命名。

一个 NewsFeed 组件可能具有逻辑上不应以 NewsFeed 开头的变异/查询,但 Relay 要求这样做,如果它们在该文件中定义

将变异放在它们自己的钩子模块中,以便名称更接近于变异的作用,而不是哪个组件调用它。如果模块名称描述得当,则可以在同一个文件中声明它。

如果您要为 Post 添加一个变异,例如向帖子添加评论,您可以创建一个名为 useAddPostComment.js 的新文件。您的变异(在此文件中)将被命名为 useAddPostCommentMutation,这是一个完美的描述性名称。

您可以考虑将所有这些钩子放在一个专门的 hooks 目录中。

根组件应该只有一个与组件紧密耦合的查询,因为它描述了该组件的数据依赖项。查询和片段应该与它们的数据使用代码位于同一位置。