useQueryがundefinedを返すときの一時的な方法!


私の場合

  • userQueryに必要な変数値を入力し、
  • を使用します.
  • ページをレンダリングした後、パッチを必要とせず、他のクエリー応答時にパッチを適用するだけで、skip:trueは
  • の初期実行を阻止します.
  • は、必要に応じて
  • を呼び出すためにrefetch関数を受信する.
  • ですが、他の場所で正常に動作しているuseQuery hookとrefetchは、1つのクエリでのみ異常に動作します.dataでundefinedを返す...!
  • 発生したエラー


  • クロムのネットワークラベルには、正常に受信されたデータが表示されます.
  • 実際のコンソールに入力されたデータ値は定義されていません.

    疑問点

  • apollo-clientキャッシュの問題.ただし、キャッシュがないため、キャッシュの問題はない(fetchpolicyがキャッシュを無効にしても)
  • .
  • 最新バージョン@apollo/clientでは私と同じエラーに遭遇した人が多く、3.0.2バージョンに降格しようと提案した人が多かったが、
  • は解決できなかった.
  • データ・ロードは問題かもしれないので、ロード、データ、エラーが正常に値を変更したかどうかを確認しましたが、ロードはfalse値のみを維持し、データとエラーには未定義の値=>gqlが含まれているかどうかを確認しましたが、問題はありません.同じクエリーを作成した他のクエリーは正常に動作します.
  • apollo client公式ドキュメントのuseQuery hookセクションで、1つ以上のエラーが発生した場合、データが未定義に設定されていることを確認します.ただし、errorも未定義であることを確認してください...
  • 便宜の策

  • refetchを実行すると、Promiseオブジェクトを返すのを見て、async/awaitを使用して非同期処理を行うことにします.

    (onCompletedが出力するデータはまだ定義されていません.async/awaitを使用すると、正常な値が出力されていることがわかります.)
  • コード#コード#


    gqlクエリー

    export const GETALLPAGE = gql`
      query getAllPage($workSpaceId: Float!) {
        getAllPage(workSpaceId: $workSpaceId) {
          children
          isRoot
          level
          pageId
          title
        }
      }
    `;

    useQuery hook(refetch使用)

    const { loading: getAllPagesLoading, refetch: getAllPages } = useQuery(
        GETALLPAGE,
        {
          onCompleted: (data) => {
            console.log("야아아아아앙", data);  ** 😭=>이부분에서 undefine 출력됨 **
          },
          onError: (e) => console.log("나 실패", e),
          skip: true,
        }
      ); 

    async/awaitの使用

     (async () => {
                const data = await getAllPages({
                  workSpaceId: +data.getAllWorkSpace[0].id,
                });
                console.log(data); => 여기서는 정상 출력😳
              })();

    その他の学習内容

  • はまだ正確な原因が分からないので、まず原因を見つけなければならない.
    一時的な方法はasync/awaitしか利用できません.
  • userQuery hookを使用すると、onCompleted、onErrorがコールバック関数として使用され、データパッチが完了するとその時点で実行されますが、そうかどうかはわかりませんが、検索する必要があります!