reactjs - 使用 React-Query Hook 有条件地调用 API

标签 reactjs react-query

我正在使用 react-query 进行 API 调用,在这种问题情况下,我只想在满足某些条件时调用 API。
我有一个输入框,用户可以在其中输入搜索查询。当输入值更改时,将使用输入内容作为搜索查询调用搜索服务器......但前提是输入值的长度超过 3 个字符。
在我的 react 组件中,我正在调用:

const {data, isLoading} = useQuery(['search', searchString], getSearchResults);
还有我的getSearchResults函数将有条件地进行 API 调用。
const getSearchResults = async (_, searchString) => {
    if (searchString.length < 3)
        return {data: []}

    const {data}  = await axios.get(`/search?q=${searchString}`)
    return data;
}
我们不能在条件中使用钩子(Hook) - 所以我将条件放入我的 API 调用函数中。
这几乎可以工作。如果我输入一个简短的查询字符串,则不会发出任何 API 请求,我会返回一个空数组来表示 data。 .耶!
但是- isLoading将翻转到 true简要说明 - 即使没有发出 HTTP 请求。所以当没有实际的网络事件时,我的加载指示器会显示。
我是否误解了如何最好地解决我的用例,有没有办法确保 isLoading如果没有 HTTP 事件,将返回 false?

最佳答案

关键是使用 Dependent Queries
因此,在我的主要组件中,我创建了一个 bool 值并将其传递给 enabled useQuery 的选项钩:

const isLongEnough = searchString.length < 3;
const {data, isLoading} = useQuery(['search', searchString], getSearchResults, {enabled: isLongEnough});
并且 API 调用方法只是 API 调用 - 没有任何条件:
const getSearchResults = async (_, searchString) => {
    const {data} = await axios.get(`/search?q=${searchString}`);
    return data;
}
文档将依赖查询描述为从后续 API 端点加载数据的解决方案,但 enable选项可以接受任何 bool 值。在这种情况下 - 如果搜索查询字符串足够长。

关于reactjs - 使用 React-Query Hook 有条件地调用 API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63397534/

相关文章:

angularjs - React 的数据绑定(bind)真的是一种方式吗?好像是有两种方式

javascript - React Button 不更新 View

javascript - 将参数传递给实际上是组件的 Prop ?

css - 在 React App 中调用 API 后不透明度转换的时间

javascript - 使用 useEffect 将 react 查询状态移动到 useState

reactjs - React-Query 和查询失效问题

javascript - 用不同的数据重新获取 react 查询

javascript - 在 js 中创建一组自定义的已定义链接方法

javascript - React Query 在重新获取时并不总是将数据标记为已更改

typescript - 如何使用react-query替换context