【发布时间】:2021-06-01 17:55:18
【问题描述】:
在我的解决方案中,我将 React Query 的 useQuery 钩子与我自己的钩子一起包装,以获得特定的重试逻辑:
export function useMyQuery(key, queryFn, options = {}) {
const queryClient = useQueryClient();
const query = useReactQuery(key, queryFn, {
...options,
retry: async(count, error) => await retry(count, error, queryClient),
});
return query;
}
retry函数本身如下:
export async function retry(count, error, queryClient) {
if (error?.statusCode === 401) {
// caught 401, trying to refresh token;
if (await refreshToken(queryClient)) {
queryClient.refetchQueries('fetchSession');
return true;
}
}
// Retry 3 times
return count < 3;
}
最后我的fetchSession 查询看起来像这样:
const { data } = useQuery('fetchSession', () => {
console.log('fetching new session...');
return Auth.currentSession();
})
我的目标是在我成功刷新上面代码中的令牌后触发“fetchSession”查询的重新获取,但是,查询永远不会重新获取,即在令牌刷新后查询正文永远不会运行。除了在queryClient上使用refetchQueries方法外,我也试过invalidateQueries没有效果。
【问题讨论】:
标签: javascript reactjs react-query