用語集
3D
データ駆動型依存関係。特定のコンポーネントを実際にレンダリングする場合にのみ、そのレンダリングに必要なコードを含めるという、Facebookのやり方。典型的なユースケースは次のとおりです。
- 通常はnullになるフィールドで、nullでない場合にのみレンダリングされます。
- ユニオン。たとえば、コアのニュースフィードアイテムには多くの異なるバリアントがあり、それぞれが別個のReactコンポーネントです。どれをレンダリングするかはデータによって異なります(つまり、「データ駆動型」)。特定のフィードでは、ほとんどのバリアントがレンダリングされず、ダウンロードする必要もありません。
- コンポーネントは、データに応じて異なるレンダリング戦略を持つことができます。
@matchディレクティブと@moduleディレクティブを参照してください。
抽象型
GraphQLのユニオンとインターフェイスは抽象型です。インターフェイスを参照してください。
抽象型リファインメント
型リファインメントを参照してください。型リファインメントが、型が特定の具体的な型(... on User { name }
など)を実装する場合に、条件付きでフィールドを含める方法である場合、抽象型リファインメントは、型が特定の抽象型(つまりインターフェイス)を実装する場合に、条件付きでフィールドを含めることを指します。したがって、... on Actor { field }
。
@arguments
ディレクティブの一種で、フラグメントスプレッドを修飾し、そのフラグメントに引数(@argumentDefinitions
で定義)を渡すために使用されます。
...Story_story @arguments(storyId: "1234")
@argumentDefinitions
フラグメント定義を修飾し、フラグメントが受け取ることができるローカル引数の名前とその型を定義するディレクティブ。
fragment Store_story on Story
@argumentDefinitions(storyId: {type: "ID!"}) {
# etc
}
フラグメントで変数を使用しているが、@argumentDefinitions
ディレクティブに含まれていない場合、Relayは、これらの変数を宣言するクエリ、または最終的にそのようなクエリでスプレッドされるフラグメントでのみ、フラグメントがスプレッドされるように要求します。
変数と比較し、ガイドツアーの関連セクションを参照してください。
アーティファクト
Relayコンパイラによって生成されるファイルで、通常は.graphql.js
で終わります。
AST
抽象構文木。Relayには、正規化とリーダの2種類のASTがあります。
.graphql.js
ファイルのデフォルトのエクスポートはASTです。
RelayコンパイラはGraphQLリテラルを解析および変換し、Relay ASTを生成します(アーティファクトを参照)。この作業をコンパイル時に行うことで、Relayランタイムを高速化できます。
アベイラビリティ
アベイラビリティの概念は、特定の要求をすぐに満たすためにストアに十分な非陳腐化データ、非無効化データがあるかどうか、またはその要求を満たすためにサーバーへの要求を行う必要があるかどうかを指します。
Babel変換
Javascriptコードベースのビルド時変換であり、次の呼び出しを
graphql`...`
require(NAME_OF_GENERATED_ARTIFACT)
呼び出しに変換します。
クライアントスキーマ拡張
GraphQL仕様では、新しい型、型に対する新しいフィールド、新しいディレクティブなどをローカルに定義できます。
Relayは、クライアントスキーマ拡張ファイルでの型とフィールドの追加をサポートしています。開発者はこの機能を使用して、グラフ上のアイテムに関連付けられた純粋にローカルな状態を含むフィールドを追加します。たとえば、User
のis_selected
フィールドなどです。
CacheConfig
クエリの応答がどのようにキャッシュされるかを制御するために使用される値。最終的にはenvironment.execute
に渡されます。
チェック
ストアのコア機能の1つ。操作が与えられると、その操作をレンダリングするために必要なすべてのデータがストアにあるかどうかを判断します。DataChecker.check
を呼び出し、操作に関連付けられたルートノードから同期的に開始し、ストア内のデータを走査します。
実際には、environment
のメソッドとして公開されます。
フェッチポリシーと組み合わせて、loadQuery
(およびその他のメソッド)が、クエリを満たすためにネットワークリクエスト呼び出しを行う必要があるかどうかを判断するために使用されます。
コミット
ネットワーク応答を受信した後、ペイロードがコミットされるか、ストアに書き込まれます。
コミットは、ミューテーションを開始し、そのデータをストアに書き込むことを記述するために使用される動詞でもあります。
コンパイラ
Javascriptファイルからgraphql
タグ付きノードをスキャンし、適切なファイル(.graphql.js
ファイル、$Parameters.js
ファイルなど)を生成するコード。
コンパイラからの生成された出力はコミットされ、リポジトリにチェックインされます。
コンクリートリクエスト
クエリ、サブスクリプション、またはミューテーションを表す抽象構文木。
クエリ、サブスクリプション、またはミューテーションに対応する.graphql.js
ファイルのデフォルトのエクスポート。
さらに、graphql
...``への呼び出しは、Relay Babel変換を介してビルド時にコンクリートリクエストに変換されます。
プリロード可能なコンクリートリクエストの重要な安全上の注意を参照してください。
設定
特に、プロジェクトのRelay コンパイラによってスキャンされるファイルを制御するファイルまたはjavascriptオブジェクト。
@connection
フィールドが接続仕様を実装することを宣言するディレクティブ。
接続
接続仕様を実装するフィールド。ガイドツアーのリストデータのレンダリングとページネーションのセクションを参照してください。usePaginationFragment
も参照してください。
コンテナ
クエリとフラグメントからのデータを子コンポーネントに提供する高階コンポーネントの用語。Relay Modernに関連付けられています。
可能な場合は、RelayフックAPIを使用する必要があります。
データチェッカー
単一のメソッドcheck
を公開するクラス。これは、操作に関連付けられたルートノードから同期的に開始し、ストア内のデータを走査します。ストア内のデータが、特定の操作を満たすのに十分かどうかを判断します。
store.check
によって呼び出されます。
DataID
レコードのグローバルに一意な識別子。欠落フィールドハンドラーを使用してクライアントで生成できます。通常、EntのID(利用可能な場合)に対応しますが、__id
フィールドの値と等しくなることが保証されています。
updater
関数とoptimisticUpdater
関数には、RelaySourceSelectorProxy
のインスタンスが渡されます。RelaySourceSelectorProxy
でDataIDを使用して.get(id)
を呼び出すと、ストア内でその項目が検索され、そのプロキシが返されます。
データマスキング
データマスキングとは、コンポーネントが、そのフラグメントやクエリ内で宣言したデータに、たとえ意図せずともアクセスできないようにする考え方を指します。これにより、コンポーネント間のデータが偶発的に結合するのを防ぎ、各コンポーネントを独立してリファクタリングできるようになります。子コンポーネントのフィールドを削除したことで、別のコンポーネントが誤って壊れるリスクをなくし、コンポーネントが安定したインフラストラクチャで高速に動くことを可能にします。
また、この考え方に基づいて、子コンポーネントのデータを親コンポーネントから隠すことも指します。
Relayでは、query FooQuery { viewer { ...subcomponent_``viewer_name } }
のように宣言されたクエリは、subcomponent_viewer_name
フラグメントを表す ReaderFragment
にアクセスしない限り、subcomponent_viewer_name
によって宣言されたデータにアクセスすることはできません。
Relayの考え方ガイドを参照してください。
@defer
フラグメントスプレッドまたはインラインフラグメントに追加して、そのフラグメントのデータのブロックを回避できるディレクティブです。詳細については、GraphQLの@deferディレクティブに関するドキュメントを参照してください。
定義
コンパイラでは、定義とは、オペレーションまたはフラグメントが定義されたGraphQLリテラル内のテキストを指します。
記述子
OperationDescriptor
またはRequestDescriptor
を指す場合があります。記述子はRelayコードベースの内部で使用される型であり、一般的には、オペレーションまたはリクエストを一意に識別するために必要な最小限の情報を含むオブジェクトを指します(たとえば、RequestIdentifier
の場合、ノード、識別子、および変数など)。
DevTools
Relayネットワークリクエスト、Relayストア、Relayイベントをデバッグするための優れたChrome拡張機能です。「なぜ期待されるデータが表示されないのか?」「なぜこのコンポーネントが中断したのか?」といった疑問に答えるのに役立ちます。
ドキュメントを参照してください。
ドキュメント
コンパイラでは、ドキュメントとは、1つ以上のオペレーションまたはフラグメント定義を含むGraphQLリテラルを指します。Relayでは、JavaScriptファイル内のGraphQLリテラルに単一の定義が含まれている必要があります。
ディレクティブ
@
で始まり、graphql
リテラルまたはgraphqlファイルに含まれる特別な命令で、Relayコンパイラまたはサーバーに特別な指示を提供します。例としては、@defer
、@stream
、@match
などがあります。
破棄可能
パラメーターを受け取らず、戻り値を提供しない.dispose
メソッドを含む任意のオブジェクト。Relayの多くのオブジェクト(クエリ参照やエントリポイント参照など)と多くのメソッドの戻り値(.subscribe
や.retain
の呼び出しなど)は破棄可能です。
エントリポイント
特定のルート、ポップオーバー、またはその他の条件付きでロードされるUIをレンダリングする前にロードする必要があるコンポーネント(JSResource
の呼び出し形式)と、ロードする必要があるクエリ(プリロード可能な具象リクエスト形式)に関する情報を含む軽量なオブジェクト。
UIの初期レンダリングに必要なすべてのクエリは、そのUIのエントリポイントに含める必要があります。
エントリポイントには、クエリや他のエントリポイントを含めることができます。
プリロード可能な具象リクエストおよびJSResourceも参照してください。
環境
他の多くのRelayオブジェクト、最も重要なのはストアとネットワークをまとめるオブジェクト。また、パブリッシュキュー、オペレーションローダー、スケジューラー、および不足フィールドハンドラーも含まれます。
RelayEnvironmentProvider
を使用して設定し、Reactコンテキストを介して渡されます。
すべての非内部Relayフックは、Relay環境コンテキスト内で呼び出す必要があります。
実行
クエリ、ミューテーション、またはサブスクリプション(総称してオペレーション)を実行することは、大まかに言って、「サブスクライブされたときにオペレーションを満たすネットワークリクエストを行い、返されたデータをストアに書き込む遅延可能なオブザーバブルを作成する」ことを意味します。
さまざまなexecute
メソッドがRelay環境で公開されています。
フェッチポリシー
ネットワークリクエストを行う状況と、可能な場合はストア内のデータを使用してクエリを満たす状況を決定する文字列。network-only
、store-and-network
、store-or-network
、またはstore-only
のいずれかです。(一部のメソッドは、すべてのフェッチポリシーを受け入れません。)
フィールド
基本的には、クエリ、ミューテーション、サブスクリプション、またはフラグメントを使用して選択できるものすべて。たとえば、viewer
、comment_create(input: $CommentCreateData)
、およびname
はすべてフィールドです。
GraphQLスキーマは多くのフィールドで構成されています。
フラグメント
フラグメントは多義的な用語であり、Relayでは少なくとも2つの異なる意味を持ちます。
GraphQLの概念としてのフラグメント
GraphQLの基本的な再利用可能な単位。クエリ、サブスクリプション、ミューテーションとは異なり、フラグメントは単独でクエリすることはできず、リクエスト内に埋め込む必要があります。
フラグメントは、クエリ、ミューテーション、サブスクリプション、および他のフラグメントにスプレッドできます。
フラグメントは、スタンドアロン(fragment Component_user on User { name }
など)またはインライン(query MyQuery { node(id: $id) { ... on User { name } } }
の... on User { name }
など)にできます。
フラグメントは常に特定の型(例のUser
)で定義され、その中で選択できるフィールドを定義します。
Relay内のフラグメント
Relay内では、フラグメントとは、特定のフラグメント/オペレーションに対して読み取られるフィールドを指します。この用語は、読者ASTを指す際にも一般的に使用されます。したがって、たとえば、次のクエリとフラグメントは同一の読者ASTを持つ可能性があります。
query Foo {
actor { name }
}
fragment Bar on Query {
actor { name }
}
フラグメント識別子
特定のフラグメントのデータを提供するのに十分な情報を提供する文字列。例:
1234{"scale":2}/Story_story/{"scale":2}/"4567"
これは、永続ID(1234
)、それに続く受け入れる変数、それに続くStory_story
フラグメント(永続IDを持たない)、使用する変数、参照されたストーリーのデータID(おそらくid
フィールド)によって識別されます。
フラグメント参照
useFragment
に渡されるパラメーター。別のクエリ、フラグメント、サブスクリプション、またはミューテーションでフラグメントがスプレッドされた値にアクセスすることで取得されます。例:
const queryData = usePreloadedQuery(
graphql`query ComponentQuery { viewer { account_user { ...Component_name } } }`,
{},
);
// queryData.viewer is the FragmentReference
// Though this would usually happen in another file, you can
// extract the value of Component_name as follows:
const fragmentData = useFragment(
graphql`fragment Component_name on User { name }`,
queryData?.viewer?.account_user,
);
クエリ参照とクエリを記述するgraphqlタグ付きリテラル(つまり、具象リクエスト)を使用してクエリからデータにアクセスできるのと同様に、フラグメント参照とフラグメントを記述するgraphqlタグ付きリテラル(つまり、リーダーフラグメント)を使用して、フラグメントから参照されるデータにアクセスできます。
フラグメントリソース
遅延ロードされたクエリをサポートする内部クラス。2つの重要なメソッドを公開します。
read
:コンポーネントのレンダリングフェーズ中に呼び出すことを意図しています。ストアからクエリを満たそうとし(environment.lookup
を呼び出すことによって)、データが利用できない場合は中断します。さらに、試行された読み取りの結果(Promise、エラー、または結果のいずれか)を内部キャッシュに書き込み、Promiseが解決または拒否されたときにそのキャッシュ値を更新します。subscribe
:コミットフェーズ中に呼び出され、Relayストアへのサブスクリプションを確立します。
.read
を呼び出すコンポーネントがクエリを正常にロードしたが、コミット前に後続のフックで中断した場合、そのクエリからのデータは、コンポーネントが最終的にレンダリングする前にガベージコレクションされる可能性があります。したがって、FragmentResource
に依存するコンポーネントは、nullデータをレンダリングするリスクがあります。
クエリリソースと比較してください。
フラグメント仕様リゾルバー
TODO
フラグメントスプレッド
フラグメントスプレッドとは、1つのフラグメントがクエリ、サブスクリプション、ミューテーション、または他のフラグメントに含まれる方法です。次の例では、...Component_name
はフラグメントスプレッドです。
query ComponentQuery {
viewer {
account_user {
...Component_name
}
}
}
フラグメントが特定の場所でスプレッドされるためには、型が一致する必要があります。たとえば、Component_name
が次のように定義されている場合:fragment Component_name on User { name }
、viewer.account_user
の型がUser
であるため、このスプレッドは有効になります。
ガベージコレクション
Relayは、保持されなくなったクエリから定期的にデータをガベージコレクションできます。
詳細については、ガイド付きツアーを参照してください。
GraphQLTaggedNode
これは、次の呼び出しの型です。
graphql`...`
ReaderFragment、ReaderInlineDataFragment、ConcreteRequest、およびConcreteUpdatableQueryの和集合です。
Flowは、GraphQLリテラルの型が生成された.graphql.js
ファイルのデフォルトエクスポートの型であることを理解するように構成できることに注意してください。
ハンドラー
TODO
ID
RelayはIDを特別に扱います。特に、次の2つのことを行います。
- コンパイラは、
id
フィールドの型がID
またはID!
であるすべての型に、id
フィールドの選択を自動的に追加します。 - 正規化データの場合、オブジェクトに
id
プロパティがある場合、そのフィールドはストア内のIDとして使用されます。
スキーマには、id
フィールドの型がID
またはID!
ではない型があります(たとえば、string
またはnumber
型)。ユーザーがこのフィールドを自分で選択した場合、このフィールドはidとして使用されます。これは予期しない不正な動作です。
@include
フィールド、インラインフラグメント、フラグメントスプレッドに追加されるディレクティブで、条件付きインクルージョンを可能にします。@skip
ディレクティブの反対です。
コンパイラでは、@include
/@skip
ディレクティブは特別に扱われ、Condition
ノードを生成します。
@inline
React のレンダリングフェーズ外で実行される関数にマスクされたデータを渡すことを可能にする、フラグメントに適用されるディレクティブです。
通常、データは useFragment
を使用して読み出されます。ただし、この関数はレンダリングフェーズ中にのみ呼び出すことができます。レンダリングフェーズ外でストアデータが必要な場合、開発者にはいくつかの選択肢があります。
- レンダリングフェーズ中にそのデータを読み出し、関数に渡すか、関数がそのデータをクロージャします。(下記も参照してください[#relay])
@inline
フラグメントへの参照を渡し、readInlineData
関数を使用して(レンダリングフェーズ外で)アクセスできます。
このディレクティブにより、親フラグメントが読み出されるときに読み出され、readInlineData
の呼び出しによってマスクが解除されます。
インターフェース (GraphQL)
インターフェースとは、型がインターフェースを実装するために含める必要のある特定のフィールドセットを含む抽象型です。
インターフェース上のフラグメントを具象型 (例: query MyQuery { viewer { account_user { ...on Actor { can_viewer_message } } }
) にスプレッドしたり、具象型上のフラグメントをインターフェース (例: query MyQuery { node(id: 4) { ... on User { name } } }
) にスプレッドすることができます。インターフェース上のフラグメントをインターフェースにスプレッドすることは、もはや許可されていません。
抽象型リファインメントも参照してください。
無効化
特定のケースでは、ミューテーションの結果を簡単に判断できます。たとえば、フィードバックに「いいね」すると、いいねのカウントが増加し、viewer_did_like
が true に設定されます。ただし、別のユーザーをブロックする場合など、ストア内のデータに対する完全な影響を判断するのが難しい場合もあります。
このような状況のために、Relay ではレコード(またはストア全体)を無効化できます。これにより、次にレンダリングされるときにデータが再フェッチされます。
ガイドのセクションを参照してください。
JSResource
React コンポーネントを、最初に require するときにバンドルするのではなく、オンデマンドでロードする必要があることを指定するための軽量 API です(直接インポートまたは require した場合は、そのようになります)。
この API はエントリポイントファイルで使用しても安全です。
[npm モジュール](https://www.npmjs.com/package/jsresource)を参照してください。遅延ロード
データのリクエストがレンダリング時に発生する場合、クエリまたはエントリポイントは遅延ロードされます。
遅延ロードされたクエリとエントリポイントには、パフォーマンス上の欠点があり、過剰フェッチや過少フェッチの影響を受けやすく、コンポーネントが null データでレンダリングされる可能性があります。これらは避ける必要があります。
リンクされたレコード
リンクされたレコードとは、別のレコードから直接アクセスできるレコードです。たとえば、クエリ query MyQuery { viewer { account_user { active_instant_game { id } } } }
では、active_instant_game
(タイプが Application
) は account_user
のリンクされたレコードです。
リンクされたレコードは単独でクエリすることはできませんが、そのサブフィールドを選択することでクエリする必要があります。
値と比較してください。
リテラル
GraphQL リテラルは、次の呼び出しです。
graphql`...`
コード内で。これらは事前処理され、ビルド時にリテラルの内容の AST 表現を含む GraphQLTaggedNode に置き換えられます。
@live
Relay リゾルバーをライブとしてマークするために追加できるドックブロックタグです。詳細については、Relay リゾルバーのドキュメントのライブフィールドセクションを参照してください。
ルックアップ
Relay ストアによって公開される主なメソッドの 1 つです。リーダセレクタを使用して、ストア内のデータを走査し、読み取られているデータと、データが欠落しているかどうかやその他の情報を含む スナップショットを返します。Relay 環境を介しても公開されます。
Reader.read
を呼び出します。
@match
@module と組み合わせて使用すると、@match で装飾されたフィールドが特定の型を持つ場合に、ユーザーが残りの GraphQL ペイロードとともに特定の JS コンポーネントをダウンロードできるようにするディレクティブです。3Dを参照してください。
MatchContainer
@match ディレクティブで装飾されたフィールドに関連して返されるコンポーネントをレンダリングするコンポーネントです。3Dを参照してください。
欠落フィールドハンドラー
フィールド (単数および複数のリンクされたフィールドの場合) の DataID とデフォルト値 (スカラーフィールドの場合) を提供する関数です。
たとえば、すでに id: 4 のアイテムをフェッチしており、node(id: 4)
を選択するクエリを実行しているとします。欠落フィールドハンドラーがない場合、Relay は id: 4 のアイテムが node(id: 4)
によって返されることを認識せず、したがって、このデータをネットワーク経由でフェッチしようとします。欠落フィールドハンドラーを提供することで、この選択の結果が id: 4 に存在することを Relay に通知できるため、Relay はネットワークリクエストを回避できます。
getRelayFBMissingFieldHandlers.js
は、これとその他の欠落フィールドハンドラーを提供します。
@module
@match と組み合わせて使用すると、@match で装飾されたフィールドが特定の型を持つ場合にダウンロードする JS コンポーネントをユーザーが指定できるようにするディレクティブです。3Dを参照してください。
モジュール
TODO
ミューテーション
ミューテーションは、バックエンドでのミューテーションと、更新されたデータに対するクエリの 2 つの組み合わせです。
[ミューテーションに関するガイド](../guided-tour/updating-data/graphql-mutations)を参照してください。ミューテーションルートクエリ
ミューテーションクエリのルートオブジェクト。updater
または optimisticUpdater
で、store.getRootField('field_name')
を呼び出すと、field_name
という名前のミューテーションルートクエリからオブジェクトが返されます。
このオブジェクトで公開されるフィールドは、クエリで使用できるフィールドとは異なり、ミューテーションによって異なります。
ネットワーク
Relay 環境には、単一の execute
関数を公開する network
オブジェクトが含まれています。Relay によって開始されたすべてのネットワークリクエストは、このコードを通過します。
これにより、認証や承認などの横断的な関心事を処理するのに便利な場所が提供されます。
ノード
TODO
正規化
正規化とは、ネストされたデータ (サーバー応答など) を、フラットなデータ (Relay がストアに保存する方法) に変換するプロセスです。
レスポンスノーマライザーを参照してください。
正規化 AST
AST で、オペレーションに関連付けられており、(変数と組み合わせて) 次の目的で使用できます。
- ネットワークペイロードをストアに書き込む、
- 楽観的なレスポンスをストアに書き込む、
- クエリがストア内のデータから満たされるかどうかを判断する、および
- ストア内のどのレコードが到達可能かを判断する (ガベージコレクションで使用)。
リーダー AST とは異なり、正規化 AST にはネストされたフラグメントの内容に関する情報が含まれています。
オペレーションに関連付けられた生成されたアーティファクト (例: FooQuery.graphql.js
) には、正規化 AST とリーダー AST の両方が含まれています。
正規化セレクタ
セレクタは、サブグラフをターゲットにする目的で、GraphQL フラグメント、変数、およびトラバースが進行する必要があるルートオブジェクトの Data ID を組み合わせた、グラフへのトラバースの開始点を定義します。
通知
変更されたデータを持つ各サブスクライバーに通知するストアによって公開されるメソッド。変更されたデータをレンダリングしているコンポーネントに、新しいデータで再レンダリングさせます。
オブザーバブル
現在存在する可能性があり、将来利用可能になる可能性もあるデータを表現するための Relay の基本的な抽象化です。
オブザーバブルは、オブザーバブルのデータがすでにロードされている場合、次のように同期的にアクセスできるという点で、プロミスとは異なります。
const completedObservable = Observable.from("Relay is awesome!");
let valueFromObservable;
observable.subscribe({
next: (value) => {
valueFromObservable = value;
/* this will execute in the same tick */
},
});
console.log(valueFromObservable); // logs out "Relay is awesome!"
これは、データがストアにすでに存在する場合、Relay フックが中断しないようにするため有利です。
Relay では、オブザーバブルはRxJS Observablesの部分的な実装です。
オペレーション
GraphQL では、クエリ、サブスクリプション、またはミューテーションです。
Relay では、すべてのオペレーションにも関連付けられた フラグメントがあります。したがって、正確なメンタルモデルは、オペレーションは タイプ条件 が クエリ/ミューテーション/サブスクリプション 上にあり、Relay がネットワークリクエストを行う方法を知っているフラグメントであるということです。
オペレーション記述子
口語的には、オペレーション記述子はオペレーションと変数です。
オペレーション記述子フロータイプには、Relay がデータを操作するために必要な 3 つの情報が含まれています。リーダーセレクタ、正規化セレクタ、および リクエスト記述子です。
変数は、不要な変数を排除するようにフィルタリングされ、欠落している変数のデフォルト値を含めるように設定されるため、関連性のない方法で異なるリクエストが同じリクエスト ID を使用してキャッシュされるようになります。
オペレーションモックリゾルバー
オペレーション記述子を受け取り、テスト時に使用されるネットワークレスポンスまたはエラーを返す関数。
オペレーショントラッカー
TODO
楽観的更新
TODO
楽観的アップデータ
TODO
ページネーション
データリスト(コネクション)を分割してクエリすることをページネーションといいます。
GraphQLのドキュメントと、当社のガイドツアーをご覧ください。
ペイロード
GraphQLサーバーからリクエストへのレスポンスの一部として返される値。
複数形フィールド
値の配列またはレコードが値となるフィールド。
@preloadable
クエリを修正し、Relayに$Parameters.js
ファイルとプリロード可能な具体的なリクエストを生成させるディレクティブ。クエリがエントリポイントの一部として使用される場合は必須です。
プリロード可能な具体的なリクエスト
クエリを開始し、完全なクエリAST(ConcreteRequest
)をフェッチするのに十分な情報を提供する、軽量なオブジェクト。このオブジェクトは、クエリに@preloadable
が付与されている場合にのみ生成され、$parameters.js
ファイルのデフォルトのエクスポートになります。@preloadable
が付与されているクエリに対してのみ生成されます。
具体的なリクエスト(.graphql.js
ファイルのデフォルトのエクスポート)とは異なり、プリロード可能な具体的なリクエストは非常に軽量です。
エントリポイントは、.queries[queryName].parameters
の位置にプリロード可能な具体的なリクエストまたは具体的なリクエストのいずれかを受け入れることに注意してください。ただし、具体的なリクエストは軽量なオブジェクトではないため、プリロード可能な具体的なリクエストのみを含める必要があります。
また、プリロード可能なクエリにはid
フィールドがありますが、他のクエリにはありません。
プリロード可能なクエリレジストリ
特定のクエリAST(具体的なリクエスト)がロードされたときにコールバックを実行する中央レジストリ。
React Nativeでコンポーネントを動的にロードする場合の現在の制限により必須です。
プロジェクト
RelayがGraphQLリテラルを含むファイルを処理するには、プロジェクトに含める必要があります。プロジェクトは、適用されるフォルダー、GraphQLリテラルを評価するスキーマを指定し、Relayコンパイラーに必要なその他の情報を含みます。
プロファイラー
TODO
公開
store
が公開する主なメソッドの1つ。レコードソースを受け取り、そこからストアのレコードが更新されます。また、公開の結果としてストアのどのレコードが更新されたかのマッピングも更新されます。
1回以上のpublish
の呼び出しの後には、notify
の呼び出しが続く必要があります。
公開キュー
環境によって内部的に使用され、保留中の(楽観的な)更新を追跡、適用、および元に戻すためのクラス。クライアントの更新をコミットし、サーバーのレスポンスをコミットします。
キューからの更新の追加または削除のみを行うcommitUpdate
のようなミューテーターメソッド、および実際にこれらの更新を実行してstore.publish
およびstore.notify
を呼び出すrun
メソッドを公開します。
クエリ
GraphQLクエリは、GraphQLサーバーに送信できるリクエストであり、いくつかの変数と組み合わせて、データをフェッチするために使用されます。これは、フィールドの選択で構成され、他のフラグメントが含まれる可能性があります。
クエリ実行者
ネットワークオブザーバブルからの楽観的なレスポンスとネットワークレスポンスを正規化し、ストアに公開するクラス。
各レスポンスがストアに公開されると、store.notify
が呼び出され、再レンダリングする必要があるすべてのコンポーネントが更新されます。
execute
、executeWithSource
、executeMutation
などのメソッドでenvironment
によって使用されます。
クエリ参照
TODO
クエリリソース
遅延ロードされたクエリを支援し、2つの重要なメソッド(prepare
およびretain
)を公開するクラス。
prepare
は、コンポーネントのレンダリングメソッド中に呼び出され、クエリの既存のキャッシュ値を読み取るか、クエリをフェッチして中断します。また、試行された読み取りの結果(データ、データへのプロミス、またはエラー)をローカルキャッシュに保存します。retain
は、コンポーネントが正常にレンダリングされた後に呼び出されます。
.prepare
を呼び出すコンポーネントがクエリを正常にロードしたが、コミット前に後続のフックで中断した場合、そのクエリからのデータは、コンポーネントが最終的にレンダリングされる前にガベージコレクションされる可能性があります。したがって、QueryResource
に依存するコンポーネントは、nullデータをレンダリングするリスクがあります。
フラグメントリソースと比較してください。
@raw_response_type
commitMutation
へのoptimisticResponse
パラメーターをカバーする型をRelayに生成するように指示するクエリに追加されたディレクティブ。
詳細については、データの更新に関するガイドツアーを参照してください。
リーダー
TODO このセクション
リーダーAST
特定のフラグメントで選択されたデータを読み取るために使用されるAST。
オペレーションとフラグメントの両方にリーダーASTがあります。
リーダーASTには、特定の場所で展開されるフラグメントに関する情報が含まれていますが、正規化ASTとは異なり、これらのフラグメント内で選択されたフィールドに関する情報は含まれていません。
リーダフラグメント
TODO
GraphQLTaggedNodeを参照してください。
リーダセレクター
ストアがデータをトラバースし、クエリまたはフラグメントによって表されるオブジェクトを構築するのに十分な情報を含むオブジェクト。直感的に、これはオブジェクトグラフの一部を「選択」します。
また、lookupも参照してください。
レコード
レコードとは、Relayのストア内の任意のアイテムを指し、IDによって格納されます。値はレコードではありません。他のほとんどすべてがレコードです。
レコードソース
レコードをDataIDでキー設定して格納するための抽象インターフェース。ストアのキャッシュとその更新の両方を表すために使用されます。
レコードソースセレクタープロキシ
レコードプロキシを参照してください。
レコードプロキシ
ストアのドキュメントを参照してください。
参照カウント
特定のオブジェクトにアクセスできる他のオブジェクトの数を追跡し、その数がゼロになったときにそれをクリーンアップまたは破棄するパターン。このパターンは、Relayコードベース全体で実装されています。
参照マーカー
TODO
@refetchable
フラグメントを修正し、Relayにそのフラグメントのクエリを生成させるディレクティブ。
これにより効率が向上します。フラグメントは、最初に単一の大きなクエリの一部としてロードできます(したがって、すべてのデータをフェッチするには単一のリクエストのみが必要になります)。それでも、独立して再フェッチできます。
@relay
データマスキングをオフにすることを許可し、複数形型で使用されるディレクティブ。
ドキュメントを参照してください。
Relay Classic
Relayのさらに古いバージョン。
Relay Hooks
最も使いやすく、最も安全なRelay API。サスペンスに依存しており、Reactの同時モードで安全に使用できます。
Relay ClassicまたはRelay Modernを使用して新しいコードを作成しないでください。
Relay Modern
Relayの古いバージョン。このバージョンのRelayには、コンテナに重点を置いたAPIがありました。
Relayリゾルバー
Relayリゾルバーは、派生状態をRelayのGraphQLグラフ内のクライアント専用フィールドとしてモデル化できるようにする、実験的なRelay機能です。
また、Relayリゾルバー入門を参照してください。
リリースバッファ
クエリがリリース(もはや保持されない)されると、それらのルートノードは固定サイズのリリースバッファに格納され、リリースバッファに十分なスペースがない場合に、新たにリリースされたクエリによってのみ削除されます。Relayがガベージコレクションを実行するとき、リリースバッファに存在し、破棄されていないクエリ。
リリースバッファのサイズは、gcReleaseBufferSize
パラメータで設定します。
@required
潜在的にnull
値をより人間工学的に処理するためのRelayディレクティブ。
@required
ガイドも参照してください。
リクエスト
リクエストとは、ネットワークを介してデータにアクセスまたは変更するために行われるAPI呼び出しを指します。
クエリは、開始されると、ストアからクエリを満たすことができるかどうかに応じて、リクエストを行う場合と行わない場合があります。
リクエスト記述子
具体的なリクエストと変数、および事前計算されたリクエストIDを関連付けるオブジェクト。変数は、不要な変数を除外するようにフィルタリングし、欠落している変数のデフォルト値を含むように設定する必要があり、それによって、無関係な方法で異なるリクエストが同じリクエストIDを使用してキャッシュされるようにします。
リゾルバー
オーバーロードされた用語で、主に仮想フィールドを指しますが、他のものを指すこともあります。
フィールドを記述する場合
リゾルバーフィールドは、「仮想」フィールドであり、同じ型のフラグメント参照から任意の値を返す関数によってバックアップされています。
ライブリゾルバーは、「仮想」フィールドであり、外部データソースによってバックアップされています。たとえば、ローカルストレージまたは外部Fluxストアに保存されている状態を公開するために外部リゾルバーを使用する場合があります。
その他の意味
また、フラグメントスペックリゾルバーまたはオペレーションモックリゾルバーである場合もあります。
レスポンス
TODO
レスポンスノーマライザー
単一のメソッドnormalize
を公開するクラス。これにより、APIリクエストからの非正規化されたレスポンスをトラバースし、正規化して、正規化された結果を特定のMutableRecordSource
に書き込みます。クエリ実行プログラムから呼び出されます。
復元
TODO
保持
TODO
レンダーポリシー
TODO
リバート
TODO
ルートフィールド
TODO
ルート型
GraphQL仕様では、Query、Mutation、Subscriptionの3つの特別なルート型を定義しています。クエリはQueryルート型からフィールドを選択する必要があります。など。
ルート
特定のページまたは画面の最上位のReactコンポーネント。エントリポイントに関連付けることができます。
エントリポイントのルートは、ルートReactコンポーネントモジュールへのJSResource
によって参照されます。
スカラー
TODO
スケジューラー
TODO
スキーマ
特定のプロジェクトに対して、Relayが認識しているすべてのGraphQL型のコレクション。
スキーマ拡張
TODO
選択
「フィールドの選択」とは、クエリ、ミューテーション、サブスクリプション、またはフラグメントの一部としてアクセスしているオブジェクトで要求しているフィールドを指します。
セレクター
正規化セレクターを参照してください。
@skip
フィールド、インラインフラグメント、フラグメントスプレッドに追加され、条件付き包含を可能にするディレクティブ。@include
ディレクティブの反対です。
スナップショット
ストア内の現在のデータに対してリーダーセレクターを実行した結果。lookupを参照してください。
古い
TODO
ストア
TODO
@stream
List
型のフィールドに追加できるディレクティブで、リスト内の個々の項目を段階的に配信できるようにします。クライアントは、サーバーが残りの項目を配信するのを待っている間に、項目の初期セットをレンダリングできます。詳細については、GraphQLの@streamディレクティブに関するドキュメントを参照してください。
@stream_connection
ページネーション用の@connectionディレクティブに似ていますが、ページネーションキュー内の項目を段階的に配信できるように変更されたディレクティブ。初期ペイロードで配信する項目の数を指定するための追加パラメータinitial_count
があります。このディレクティブの使用方法の詳細については、ストリーミングページネーションページを参照してください。
サブスクライブ
Relayストアによって公開されるメソッド。コールバックとスナップショット(lookupを参照)を受け入れます。Relayストアは、そのスナップショットで参照されるデータが更新または無効化された場合に、notify
が呼び出されると、このコールバックを呼び出します。
サブスクリプション
GraphQLサブスクリプションは、クライアントがサーバーからのデータの一部への変更をサブスクライブし、そのデータが変更されるたびに通知を受け取ることができるメカニズムです。
GraphQLサブスクリプションは、subscriptionキーワードを使用する点を除いて、クエリと非常によく似ています。
subscription FeedbackLikeSubscription($input: FeedbackLikeSubscribeData!) {
feedback_like_subscribe(data: $input) {
feedback {
id
like_count
}
}
}
トランザクションID
network.execute
の呼び出しの特定のインスタンスの一意のID。このIDは、ネットワークリクエストの全期間にわたって一貫性があります。RelayModernEnvironment
に渡されるカスタムログ関数で使用できます。
トラバーサル
Relayの内部動作を理解する上で重要な4つのツリートラバーサルがあります。
- 正規化ASTの使用
- RelayがレスポンスノーマライザーでGraphQLサーバーから受信したペイロードを正規化するとき。
- Relayが、データチェッカーで操作を満たすのに十分なデータがあるかどうかを判断するとき。そして
- Relayが、リファレンスマーカーでガベージコレクション中にアクセスできなくなったデータを判断するとき。
- リーダーASTの使用
- Relayがリーダーでレンダリング用にデータを読み取るとき。
型
フィールドのGraphQL型は、スキーマ上のフィールドの説明であり、そのサブフィールドの内容や、その表現(文字列、数値など)によって決まります。
詳細については、インターフェース、抽象型、およびGraphQLドキュメントも参照してください。
型絞り込み
特定の型のフラグメントを含めることは、その型を実装する可能性のある場所でのみ認識されます。これにより、特定のオブジェクトで定義されている場合にのみフィールドを選択し、それ以外の場合はnullを返すことができます。
たとえば、node(id: 4) { ... on User { name } }
とします。この場合、node(id: 4)
がUserであるかどうかを事前に知ることはできません。もしそうなら、このフラグメントはユーザー名を含めます。
抽象型絞り込みも参照してください。
アップデーター
commitMutation
に渡されるコールバック。これにより、アプリケーション開発者はストア内のデータを命令的に制御できます。
ドキュメントと楽観的なアップデーターも参照してください。
値
has_viewer_liked
やname
など、レコード上の単一の値。
リンクされたレコードと比較してください。
変数
GraphQL変数は、GraphQLクエリ内で動的な値を参照できる構造です。クエリが開始されるときに提供する必要があり、ネストされたフラグメント全体で使用できます。
ガイドツアーの変数セクションを参照し、@argumentDefinitionsと比較してください。
このページは役に立ちましたか?
いくつかの簡単な質問に答えて、サイトをさらに改善にご協力ください。 いくつかの簡単な質問に答えて.