Apollo 客户端 useQuery 正在跳过但在跳过标志变为 false 时不重新运行查询?

问题描述

因此,我们运行了 2 个不同的查询获取用户权限,而其他查询则不是。有大量数据,并且我们设置权限的方式有很大差异。因此,初始 GET_STUFF 抓取了一堆初步数据,GET_STUFF_ASYNC 需要等到第一个查询完成(因此 skip: loading)。

  const { loading,data } = useQuery(GET_STUFF);
  const {
    loading: permissionsLoading,data: permissionsData
  } = useQuery(GET_STUFF_ASYNC,{ skip: loading });

再往下,我们有这个:

  useEffect(() => {
    if (permissionsLoading || !permissionsData) {
      return;
    }
    doStuff() // set the user's permissions data that come in.
    });
  },[permissionsData]);

问题是,在某些情况下,我控制+单击以打开多个选项卡,如果我在获取数据时没有查看这些选项卡,则 useEffect 通常会提前返回,并且权限数据永远不会更新,因此我们会更新用户权限。
那么,A:GET_STUFF_ASYNC 是否应该在加载变为 false 时重新运行,即使它最初是跳过的? B:还有其他方法可以解决这个问题吗?
我们希望 GET_STUFF 在运行 GET_STUFF_ASYNC 之前完成。但是无论出于什么奇怪的原因,当我打开一个标签页并且有一段时间没有真正查看新打开的页面时,某些内容不会得到更新。

解决方法

您可以使用 @app.callback( Output("graph","figure"),Input("radio_items","value"),Input("dropdown","value") ) def update_output(item,chart_type): return charts[chart_type](df,x=df.date,y=df[item]) 代替 useLazyQuery 。 useLazyQuery API 类似于 useMutation,后者为您提供了一个可以通过编程方式触发的函数。

useQuery

参考

useLazyQuery