如何解决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
参考
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。