4

私はもう少し複雑なデータ構造を持っているため、深くネストされたグラフになります。現在、私は常にルートクエリを介してフェッチ/リロードしています。ただし、サーバーがツリー全体を解決する必要があるため、これは最善の方法ではないと思います。

ツリー全体を走査せずに、2 番目のリクエストでネストされたグラフのサブエッジの追加データ/エッジをフェッチ/リロードすることは可能ですか?

はいの場合、どのように?

例:私は

RootQuery Spaces
 + ... Other Layers
    + Project
        + Edge Tasks
            + Edge SubTasks
                + Edge Assigned User

プロジェクト リストの表示 最初のリクエストでタスクをロードしていません。ユーザーがプロジェクトを開いた場合、親/ルートまたはRootQueryから始まるツリー全体をリロードせずに、このプロジェクトのみのタスクをレイシーロードしたいと思います。

4

1 に答える 1

3

簡単な回答: いいえ、ルート クエリ タイプ定義のフィールドとしてリストされていないデータをクエリすることはできません。

長い回答: ルート クエリにフィールドを追加しないとこれは不可能ですtasksが、プロジェクト ID であるパラメーターを使用してクエリを追加するだけで、探している動作を実現できます。次に、クライアントで にクエリを実行している間projects、タスクエッジを要求せず、tasks(projectId: ID)必要なときに別のクエリを送信するだけです。

apollo の GitHunt の例では、同じことを行って各レポのコメント リストをクエリし、ユーザーがレポのリンクにカーソルを合わせたときにデータをプリフェッチします。もちろん、それは怠け者ではなく半熱心な行動であるため、そこで自分の選択を行うことができます。

GraphQL の将来の機能により@stream、クライアントの準備が整ったときにクライアントへのタスクのリストを表示できるようになり@deferます。あなたのシナリオでは、2 番目のクエリを送信する必要がない、より優れたソリューションが得られる可能性があります。

詳細については、こちらの lee の講演をご覧ください: https://youtu.be/ViXL0YQnioU?t=12m50s

于 2016-11-19T16:38:05.213 に答える