ミューテーション、クエリ、サブスクリプションの構成
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
ディレクトリに配置することを検討できます。
クエリの推奨構造
ルートコンポーネントは、そのコンポーネントのデータの依存関係を記述するため、コンポーネントと緊密に結合された単一のクエリを持つ必要があります。クエリとフラグメントは、データ使用コードと同じ場所に配置する必要があります。