【发布时间】:2022-01-10 13:15:27
【问题描述】:
我有自定义提取钩子,它使用 useQuery - 来自 react-query。如何根据我提供的 boolean 属性防止获取/重新获取。
目前我正在使用{ enabled: allowedToFetch },但这并不能阻止当我使用来自 react-query 的refetch 方法时进行获取。
【问题讨论】:
标签: reactjs api react-hooks fetch-api react-query
我有自定义提取钩子,它使用 useQuery - 来自 react-query。如何根据我提供的 boolean 属性防止获取/重新获取。
目前我正在使用{ enabled: allowedToFetch },但这并不能阻止当我使用来自 react-query 的refetch 方法时进行获取。
【问题讨论】:
标签: reactjs api react-hooks fetch-api react-query
根据设计,从useQuery 返回的refetch 执行无条件提取,甚至绕过enabled。
这里有很好的记录:https://react-query.tanstack.com/guides/disabling-queries
这是必要的,这样您就可以通过设置enabled: false 和使用refetch() 来选择退出智能重新获取并进入“手动”模式。
queryClient.refetchQueries 和 queryClient.invalidateQueries 尊重 enabled,所有智能重新获取也是如此。
问题是:为什么在调用refetch 时有一个禁用的查询,但不 不希望它实际重新获取?有什么用例?
如果条件是:enabled: allowedToFetch,我会:
.) 在相同的条件下包装 refetch 调用:
if (allowedToFetch) {
refetch()
}
.) 或使用本地状态来驱动查询(首选解决方案):
const [allowedToFetch, setAllowedToFetch] = useState(false)
useQuery(key, fn, { enabled: allowedToFetch })
现在您需要做的就是调用:
setAllowedToFetch(true)
这将启用查询,而 react-query 将完成其余的工作。
【讨论】:
allowedToFetch 最初是假的,在某些时候它设置为真。所以虽然allowedToFetch 是假的并且我的组件渲染它不会获取,但是当它调用refetch 方法10 秒后,即使allowedToFetch 是假的,它也会重新获取 - 但我明白为什么,我只是想知道什么是最好的解决方案这个案例。
useQuery 一起使用并且prop` allowedToFetch` 最初为false - 我将其用作enabled: allowedToFetch,但随后切换为true,它会自动开始获取吗?当我查看文档时,我看到查询键用作 dep 数组而不是选项...
refetchInterval 选项?
if (allowedToFetch) { refetch()}在我调用 refetch 方法的地方或向我的钩子添加额外的属性,它将接受 ms 或 false。