13

私はRelayを初めて使用しますが、まだ頭を抱えようとしています。私の理解では、Relay はクエリをコンポーネントに結び付けます。このように、GraphQL サーバーから x、y、z をコンポーネントに提供する必要があると言えます。私の理解に基づいて、公式react-relayライブラリは、コンポーネントがレンダリングされようとしているときなど、適切なタイミングでこれらのクエリをディスパッチします。

これは、単純にデータのリストを表示するなど、単純なユース ケースでは理にかなっています。

しかし、私がどうしたらよいか混乱しているのは、コンポーネントに結び付けられる何かのカテゴリーに完全に分類されない可能性のあるクエリをディスパッチする方法です。ユーザー認証セッション トークンなどを取得しようとするクエリなど。これが私の現在の状況です。GraphQL からセッション トークンを取得するユーザー サインイン フォームを作成しようとしています。ユーザー名とパスワードの引数を必要とするパラメーター化された GraphQL フィールドがあり、それらが有効な場合はセッション トークンを返します。Relayを使用してそのセッショントークンを照会する方法がわかりません。

基本的には、クエリをディスパッチして応答を処理するだけで済みます (そのセッション トークンを React アプリケーションの状態に配置します)。

何か案は?

4

2 に答える 2

20

Relay の API は主に、コンポーネントのデータを簡単に取得できるようにすることに重点を置いていますが、Relay はアドホック クエリもサポートしています。API は比較的低レベルであり、データのフェッチと読み取りのための個別の機能を備えています。アドホック クエリを取得して応答にアクセスする方法の例を次に示します。

// Create a query with values for any variables:
var query = Relay.createQuery(Relay.QL`query ... `, {var: 'value'});
// Fetch any fields that have not yet been cached:
Relay.Store.primeCache({query}, readyState => {
  if (readyState.done) {
    // When all data is ready, read the data from the cache:
    var data = Relay.Store.readQuery(query)[0];
    /* access fields on `data` */
  }
});

データを Relay のキャッシュと同期する必要がない場合は、プレーンなネットワーク リクエスト (XHR、フェッチなど) を使用して、プレーンな文字列クエリを GraphQL エンドポイントに送信することもできます。

于 2015-12-21T22:52:06.713 に答える