使用了React.lazy做了路由懒加载,但是怎么处理chunk.js加载失败然后重新加载js呢?

发布于 2022-09-12 01:41:38 字数 1690 浏览 22 评论 0

这是官方文档:基于路由的代码分割

使用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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文