组织变异、查询和订阅
Relay 操作(变异、查询和订阅)有严格的命名要求。操作名称必须以模块名称开头,并以 GraphQL 操作类型结尾。该名称还必须是全局唯一的。
旁注:这种命名方案起源于尝试强制执行唯一性约束。在 Meta,Haste(一个用于静态资源的依赖管理系统)强制执行所有模块名称都是唯一的,以便推导出合理的全局唯一 Relay 名称。将模块名称和 Relay 名称耦合也使得在知道该名称的情况下更容易找到片段/查询/变异。这在 Meta 中很有意义,但在 OSS 环境中可能不太合理。
例如
- 在文件
MyComponent.js
中的变异必须使用方案MyComponent[MyDescriptiveNameHere]Mutation
命名。 - 在文件
MyComponent.react.js
中的查询必须使用方案MyComponent*Query
命名。
一个 NewsFeed 组件可能具有逻辑上不应以 NewsFeed
开头的变异/查询,但 Relay 要求这样做,如果它们在该文件中定义。
变异和订阅的推荐结构
将变异放在它们自己的钩子模块中,以便名称更接近于变异的作用,而不是哪个组件调用它。如果模块名称描述得当,则可以在同一个文件中声明它。
如果您要为 Post
添加一个变异,例如向帖子添加评论,您可以创建一个名为 useAddPostComment.js
的新文件。您的变异(在此文件中)将被命名为 useAddPostCommentMutation
,这是一个完美的描述性名称。
您可以考虑将所有这些钩子放在一个专门的 hooks
目录中。
查询的推荐结构
根组件应该只有一个与组件紧密耦合的查询,因为它描述了该组件的数据依赖项。查询和片段应该与它们的数据使用代码位于同一位置。