【发布时间】:2021-08-24 15:48:09
【问题描述】:
因此,我们运行了 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 是否应该在加载变为错误时重新运行,即使它最初是跳过的?
B:还有其他方法可以解决这个问题吗?
我们希望 GET_STUFF 在运行 GET_STUFF_ASYNC 之前完成。但是无论出于什么奇怪的原因,当我打开一个标签并且有一段时间没有真正查看新打开的页面时,某些内容不会得到更新。
【问题讨论】:
标签: reactjs apollo apollo-client react-apollo