React Query预取功能未按预期工作,寻求技术帮助
React Query预取功能未按预期复用缓存问题求助
刚着手将应用迁移至React Query,作为该库的新手,我怀疑自己可能误解了预取功能的工作逻辑,目前预取未按预期生效,恳请协助。
我希望在用户登录后预取一个耗时的API接口,以便用户进入需要该数据的页面时,能获得更好的感知性能。
已执行的操作
- 首页中执行预取:
queryClient.prefetchQuery(["requisition", auth.token, auth.id], () => getRequisitionsAllData(auth.token, auth.id), );
- 自定义Hook:
export const useRequisitionQuery = (token, id) => { const queryOptions = { staleTime: 300 }; return useQuery( ["requisition", token, id], () => getRequisitionsAllData(token, id), queryOptions, ); };
- 在需要数据的组件中使用Hook:
const { isLoading, isError, data, error, isFetching } = useRequisitionQuery( token, id, );
观测结果
- 首页的预取是生效的:网络请求显示预取的API接口已成功发起并返回数据
- 跳转至目标页面后,缓存数据未被复用,而是重新发起了请求,页面无法立即获取数据:网络请求显示重复发起了相同的API请求
- 依赖该数据的表格需等待请求完成才会渲染,且
console.log(data)在请求完成前返回[]
我是否误解了预取的工作机制?我认为缓存数据应立即加载。感谢您的时间。
补充页面跳转细节
使用React Router结合RequireAuth组件包裹路由,App.js代码如下:
<Router> <MasterNavbar /> <Routes> <Route path="/SignIn" element={<SignIn setToken={setToken} />} /> <Route path="/" element={ <RequireAuth> <HomeLanding /> </RequireAuth> } /> <Route path="/TrackRequisitions" element={ <RequireAuth> <TrackRequisitions /> </RequireAuth> } /> </Routes> </Router>;
RequireAuth仅用于校验用户是否持有有效token:
if (!auth.token || !auth.id || !auth.access) { return <Navigate to="/SignIn" state={{ from: location }} />; } return children;
页面跳转通过导航栏的NavButton组件触发:
<NavButton navTo="Track Requisitions" link="/TrackRequisitions" />;
NavButton组件代码:
export default function NavButton(props) { return ( <Button sx={{ justifyContent: "left", "&:hover": { cursor: "pointer", backgroundColor: "#FFFFFF", "& .button-text": { textDecoration: "underline", }, }, }} color="inherit" href={props.link} > <Typography className="button-text" color="black" fontWeight={500}> {props.navTo} </Typography> </Button> ); }
内容的提问来源于stack exchange,提问作者George Nassar
相关产品推荐
相关产品推荐

