Reactjs 为什么脱机时基于路由反应PWA重新蚀刻延迟加载块
我正在尝试使用CRA和SWR进行PWA以获取数据,所以我做到了Reactjs 为什么脱机时基于路由反应PWA重新蚀刻延迟加载块,reactjs,progressive-web-apps,service-worker,Reactjs,Progressive Web Apps,Service Worker,我正在尝试使用CRA和SWR进行PWA以获取数据,所以我做到了 serviceWorker.register(); 然后创建minifist.json文件 我根据路由加载了一些组件。 因此,当我试图在浏览器上测试脱机流时,在打开“网络”选项卡时,通过“到达路由器链接”更改url,使应用程序重新获取失败的组件块(cuz offline status),从而导致错误边界触发错误 提示:在离线之前,我确实访问了该页面,因此应该已获取块。 其次,我如何添加带有CRA和PWA的自定义脱机页面 更新: 下
serviceWorker.register();
然后创建minifist.json文件
我根据路由加载了一些组件。
因此,当我试图在浏览器上测试脱机流时,在打开“网络”选项卡时,通过“到达路由器链接”更改url,使应用程序重新获取失败的组件块(cuz offline status),从而导致错误边界触发错误
提示:在离线之前,我确实访问了该页面,因此应该已获取块。
其次,我如何添加带有CRA和PWA的自定义脱机页面
更新:
下面是处理错误案例的代码
export const dev = axios.create({ ...config.dev });
// useSWR fetcher function.
export const fetcher = (url: string) =>
dev
.get(url)
.then((res) => res.data.data)
.catch(
(err) => err?.response?.data?.message || err.message || err?.data?.message
);
axiosRetry(dev, {
retries: 3,
retryDelay: (retryCount) => {
return retryCount * 1500;
},
});
我确实在顶层全局添加了fetcher函数
<SWRConfig
value={{
fetcher,
}}
>
...
</SWRConfig>
...
在使用useSWR的组件中
const { data: actions, error }: any = useSWR(url);
if (error)
return (
<h3 className="title">
Opps, {error} please try again later
</h3>
);
const{data:actions,error}:any=useSWR(url);
如果(错误)
返回(
Opps,{error}请稍后再试
);
如前所述,出现此问题的原因可能是某个主要组件中存在某些代码逻辑,而与延迟加载无关。
如果您检查控制台,您将看到以下错误。此错误导致应用程序失败
TypeError: b.map is not a function
at Auth App Page.180ff7f0.chunk.js?__WB_REVISION__=cdce21b6ef032b90bc09:1
at Ko (react-dom.production.min.js:153)
at Ma (react-dom.production.min.js:175)
at ms (react-dom.production.min.js:263)
at cu (react-dom.production.min.js:246)
at su (react-dom.production.min.js:246)
at Zs (react-dom.production.min.js:239)
at react-dom.production.min.js:123
at scheduler.production.min.js:19
at Hi (react-dom.production.min.js:122)
解决此问题后,您的应用程序将按预期运行。您找到解决方案了吗?@PouyaJabbarisani,没有,您有什么建议可以尝试吗?如果用户脱机,是否要显示自定义脱机页面?如果是这样的话,那么您提到的第一个问题就变得无关紧要了。@VimalPatel,到目前为止没有,我使用SWR来获取数据,所以我想显示最后获取的数据,这正在发生,但大约5秒钟后,页面再次重绘了块,因此,应用程序崩溃。看起来您的服务人员正在后台更新,这就是它再次重新读取区块的原因。