首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么添加一个观察者来响应-查询会导致它忽略它的“使能”属性?

为什么添加一个观察者来响应-查询会导致它忽略它的“使能”属性?
EN

Stack Overflow用户
提问于 2021-06-23 22:03:29
回答 1查看 2.4K关注 0票数 3

那里.更新:我现在已经将其作为一个问题提交给react的Github,您可能应该遵循它,

我有一个非常简单的useQuery

代码语言:javascript
复制
const refreshable = false // hard coded for the sake of example
const tokenQuery = useQuery('refresh-token', refreshQueryFn, {
  enabled: refreshable,
  refetchInterval: 1000 * 30,
  refetchIntervalInBackground: true,
})

如果这是独立的,那就没问题了。所有东西都初始化,除非refreshable被设置为true,否则它就处于休眠状态。

然而,在同样的钩子里,我加入了一个观察者.

代码语言:javascript
复制
useEffect(() => {
  // Create an observer to watch the query and update its result into state
  const observer = new QueryObserver(queryClient, {
    queryKey: 'refresh-token',
  })
  const unsubscribe = observer.subscribe((queryResult) => {
    console.log(
      'Do something with the token!'
      queryResult.data
    )
  })

  // Clean up the subscription when the component unmounts
  return () => {
    unsubscribe()
  }
}, [token, queryClient])

附加观察者的enabled**,会导致获取(和失败,以及多次重试)发生,而不考虑我认为不应该发生的。

有人能解释一下为什么会发生这种情况吗?在我提出一个反应问题之前,有人能解释一下吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-27 12:26:32

在遮罩下,useQuery创建一个带有传递给它的选项的QueryObserver。因此,在userQuery之后,您将有一个已启用的观察者: false,这将为您提供一个禁用的查询。

现在启用的是每个观察者的属性。启用一个useQuery实例,而使用与禁用的queryKey相同的另一个实例是完全合法的。

这基本上就是您要做的事情:当您手动创建新的QueryObserver时,您没有传递enabled: false给它,所以您创建了第二个已启用的观察者,它将运行查询。

因此,将refreshable传递给新的Oberver的enabled选项应该可以解决这个问题:

代码语言:javascript
复制
const observer = new QueryObserver(queryClient, {
  queryKey: 'refresh-token',
  enabled: refreshable,
})
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68107497

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档