我正在使用 react-query 进行 API 调用,在这种问题情况下,我只想在满足某些条件时调用 API。
我有一个输入框,用户可以在其中输入搜索查询。当输入值更改时,将使用输入内容作为搜索查询调用搜索服务器......但前提是输入值的长度超过 3 个字符。
在我的反应组件中,我正在调用:
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;
}
我们不能在条件中使用钩子 - 所以我将条件放入我的 API 调用函数中。
这几乎可以工作。如果我输入一个简短的查询字符串,则不会发出 API 请求,并且我会为data
. 耶!
但是 -即使没有发出 HTTP 请求,isLoading
也会短暂地翻转。true
所以当没有实际的网络活动时,我的加载指示器会显示。
我是否误解了如何最好地解决我的用例,有没有办法确保isLoading
如果没有 HTTP 活动会返回 false?