【发布时间】:2020-10-19 06:37:24
【问题描述】:
在Apollo Client v3 React 实现中,我使用钩子来使用订阅。当我从订阅接收数据时,我想重新获取查询,但前提是查询之前已执行并且在缓存中。有没有办法做到这一点?
我从一个惰性查询开始,然后在收到订阅数据时手动检查缓存,然后尝试执行惰性查询并重新获取。它有效,但感觉很笨重......
export const useMyStuffLazyRefetch = () => {
const [refetchNeeded, setRefetchNeeded] = useState<boolean>(false);
const client = useApolloClient();
const [getMyStuff, { data, refetch }] = useLazyQuery<IStuffData>(GET_MY_STUFF);
useEffect(() => {
if (refetchNeeded) {
setRefetchNeeded(false);
refetch();
}
}, [refetchNeeded]);
const refetchIfNeeded = async () => {
const stuffData = client.cache.readQuery<IStuffData>({ query: GET_MY_STUFF });
if (!stuffData?.myStuff?.length) return;
getMyStuff();
setRefetchNeeded(true);
}
return {
refetchIfNeeded: refetchIfNeeded
};
}
【问题讨论】:
标签: reactjs graphql react-apollo apollo-client