メインコンテンツにスキップ
バージョン: 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ディレクトリに配置することを検討できます。

ルートコンポーネントは、そのコンポーネントのデータの依存関係を記述するため、コンポーネントと緊密に結合された単一のクエリを持つ必要があります。クエリとフラグメントは、データ使用コードと同じ場所に配置する必要があります。