【发布时间】:2020-04-13 09:58:58
【问题描述】:
我当前的 React 应用程序存在延迟问题。正如目前所写的那样,我有一个顶级反应路由器,它在几个受保护的路由之间进行路由。像这样:
export default function IndexRouter(): JSX.Element {
return (
<Switch>
<Route path="/routeA" component={ComponentA} />
<Route path="/routeB" component={ComponentB} />
<Route path="/routeC" component={ComponentC} />
...
</Switch>
);
}
组件 A 从多个 API 调用中加载大量数据,包括多个数据数组和图像。这是通过自定义 Axios 钩子完成的。组件A的大致结构如下:
export default function ComponentA(): JSX.Element {
const [data, loading, error, fetch] = useAxios(...);
return (
<Sub1 />
<Sub2 />
);
}
export default function Sub1(): JSX.Element {
const [data, loading, error, fetch] = useAxios(...);
const [data1, loading1, error1, fetch1] = useAxios(...);
return (
... more sub-components
);
}
它是这样嵌套的。
所以当用户使用react-router导航到componentA时,基本上会得到很多数据。我的问题是用户经常离开组件A(这是主页),每次都回到组件A。每次,componentA 都会加载之前加载的所有数据,只需要用户进行一些细微的更改。这种重复加载会导致导航期间出现大量延迟。
我觉得我无法利用 useMemo 或 useCallback,因为在 react-router 导航期间正在卸载 componentA。我不觉得在 localStorage 中持久化数据是一个很好的长期解决方案。我也觉得将 componentA 中的所有深层 API 调用抽象为更高阶的组件也不是一个很好的解决方案,并且会导致 prop 钻孔的代码混乱。
所以我的问题是如何解决这个问题?
【问题讨论】:
标签: reactjs react-router axios react-hooks