React Query 预加载数据后怎么避免组件重复请求?
我在用 React Query 做页面切换前的数据预加载,但发现进入页面后还是会触发一次新的请求,明明之前已经 preload 过了。
我试过在路由跳转前调用 queryClient.prefetchQuery('user', fetchUser),控制台也看到只发了一次请求,可组件里用 useQuery('user') 时还是重新 fetch 了,缓存好像没生效?
相关代码大概是这样的:
const handleNavigate = async () => {
await queryClient.prefetchQuery('user', () => fetch('/api/user'));
navigate('/profile');
};
// 在 Profile 组件中
const { data } = useQuery('user', () => fetch('/api/user'));
queryKey保持一致,你那例子中prefetchQuery('user')和useQuery('user')的 queryFn 没共享,得改成:关键点是:prefetch 和 useQuery 的
queryKey必须完全一样(包括顺序),而且queryFn要能被 React Query 缓存住(别每次 render 都新建函数)。