使用了React.lazy做了路由懒加载,但是怎么处理chunk.js加载失败然后重新加载js呢?
这是官方文档:基于路由的代码分割
使用React.lazy结合suspense组件的确实现了懒加载;
然后打算处理 因为网络问题页面chunk.js加载失败导致无法显示页面的问题。所以又在suspense组件外面做了一层异常捕获.
但是现在我不知道 js加载失败后怎么再去重新加载js,然后显示页面。。。
有没有人做过类似效果,或者大家有什么想法??直接location.reload()就算了。。。。
// router.js
import { lazy } from 'react';
const index = lazy(() => import('../page/index/index.js'));
export const router = [
{
path: '/', // 首页
component: index,
name: 'index',
}
]
// App.js
<ErrorBoundary loadPageError={this.loadPageError}>
<Suspense fallback={<ActivityIndicator toast animating/>}>
{router.map((item, index) => {
return <item.component {...props} />
})}
</Suspense>
</ErrorBoundary>
// ErrorBoundary 组件 有做是否是ChunkLoadError的判断,这里只列出大概代码
export default class ErrorBoundary extends React.Component {
constructor(props) {
super(props);
this.state = {
hasError: false,
};
}
static getDerivedStateFromError(error) {
let obj = {
hasError: true
}
return obj;
}
tryAgain = () => {
// todo js加载完毕后显示页面组件
this.props.loadPageError().then(() => {
this.setState({
hasError: false,
})
})
}
componentDidCatch(error, errorInfo) {
}
render() {
return this.state.hasError ? (<div onClick={this.tryAgain}>页面加载失败,点击重试</div>) : this.props.children;
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论