当满足条件时,如何停止在 refetchInterval 上运行的反应查询 useQuery?

chr*_*ane 9 reactjs react-query

我需要继续获取数据,直到满足条件为止,我可以使用下面的代码片段设置按时间间隔获取数据,但我不知道如何fetchData在需要时停止。这可能吗?

const { status: answersStatus, data: answers } = useQuery(
                           ['fetchData', { context, activity, stage, country }], 
                           fetchData,
                           {refetchInterval: 2000});
Run Code Online (Sandbox Code Playgroud)

TkD*_*odo 16

更新

从react-query v3.25.0开始,refetchInterval可以接受一个函数来更好地适应这个用例:

refetchInterval: data => (isConditionMet(data) ? false : 2000)
Run Code Online (Sandbox Code Playgroud)

原答案

与当地州:

const [refetchInterval, setRefetchInterval] = React.useState(2000)
const { status: answersStatus, data: answers } = useQuery(
    ['fetchData', { context, activity, stage, country }], 
    fetchData,
    {refetchInterval});
Run Code Online (Sandbox Code Playgroud)

您可以将其设置refetchIntervalfalse0将其关闭。如果您想根据响应来执行此操作,onSuccessonError回调onSettled可能是最好的地方:

const [refetchInterval, setRefetchInterval] = React.useState(2000)
const { status: answersStatus, data: answers } = useQuery(
    ['fetchData', { context, activity, stage, country }], 
    fetchData,
    {
        refetchInterval,
        onError: () => setRefetchInterval(0)
    });
Run Code Online (Sandbox Code Playgroud)


Дми*_*нов 5

对我来说,它导致无限循环,直到将函数传递给refetchInterval类似的函数:

refetchInterval: data => (checkMyResponseHere(data) ? false : 2000)

PS 反应查询 v.3.38.0

  • 这有效!多谢,伙计。有趣的是,这没有出现在 React Query 文档中 (3认同)