【问题标题】:React-Query, useQuery returns undefined only after loading is completeReact-Query, useQuery 仅在加载完成后返回 undefined
【发布时间】:2021-10-10 15:06:29
【问题描述】:

我在我的 react 应用程序中使用 react-query 包。我有一个模式,它使用 useQuery 从带有 axios 的 api 获取数据。除 GET 搜索/参数端点外,多个端点都可以工作。 axios返回预期的数据,但是一旦在useQuery中加载完成,就会返回undefined。

import React from "react";
import { useQuery } from "react-query";
import { api } from "../../../api";

export const useSearch = (query) => {
  const searchResults = useQuery(
    api.clubhouse.searchCacheKey(query),
    api.clubhouse.search({ params: { query: query } })
  );

  let searchData = [];

  let isLoading = searchResults.isLoading;

  if (!isLoading) {
    searchData = searchResults.data;
  }

  return { searchData, isLoading };
};

一旦isLoading: falsesearchResults 变为未定义,我看到此错误TypeError: config.queryFn.apply is not a function。如果我登录api.clubhouse.search(包含 axios 调用),我可以看到正确的数据。这种模式也适用于其他 api 调用...

【问题讨论】:

    标签: reactjs axios react-query


    【解决方案1】:

    我猜这可能是你的问题:

    api.clubhouse.search({ params: { query: query } })
    

    我猜这里的search 函数正在返回一个promise,但是您需要将一个函数传递给useQuery,它返回一个promise 而不是promise 本身。所以,也许做这样的改变:

    const searchResults = useQuery(
      api.clubhouse.searchCacheKey(query),
      () => api.clubhouse.search({ params: { query: query } })
    );
    

    【讨论】:

    • 这似乎有效!不知道为什么我的其他 useQuery 函数可以正常工作,但是哦……谢谢!
    • 可能是因为它们没有任何参数。如果你传入api.clubhouse.search,你就传入函数本身。但是如果你调用函数,你会传入结果。
    猜你喜欢
    • 2020-01-02
    • 2021-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-07
    • 2016-09-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多