【发布时间】:2020-11-11 22:51:30
【问题描述】:
我有一个突变,用于登录我的应用程序。我想每 5 分钟重新运行一次登录突变,以检查他们的个人资料是否有更新。 useQuery 有一个 pollingInterval 选项,但 useMutation 没有。
我尝试使用钩子在间隔上运行突变,但这并没有真正起作用,因为 useAuth 钩子同时在多个组件中使用,所以它最终会为每个组件创建一个间隔。
function useInterval(callback: () => any, delay: number | null) {
const savedCallback = useRef<any>();
useEffect(() => {
savedCallback.current = callback;
}, [callback]);
useEffect(() => {
function tick() {
savedCallback.current();
}
if (delay !== null) {
const id = setInterval(tick, delay);
return () => clearInterval(id);
}
}, [delay]);
}
function useAuth(){
const [login,{data:loginData} = useMutation(gql`
...
`);
useInterval(() => login(Cookies.get(TOKEN_NAME),1000*60*5);
return login;
}
function App(){
const login = useAuth();
useEffect(() => {
login(Cookies.get(TOKEN_NAME));
},[login]);
...
}
【问题讨论】:
标签: reactjs graphql react-hooks react-apollo