当前位置: 首页 > 知识库问答 >
问题:

javascript - react中如何正确使用懒加载?

丁安宜
2023-06-03

react项目为了做性能优化减小包体积在项目中用了大量的React.lazy加载组件进行代码分割,效果也挺明显,包大小从1.4M缩小到110KB但是到生产后监控到通过React.Lazy这种方式加载组件会有失败的场景(走到了代码的catch)。请问下这种场景页面是不是会报错白屏(复现不出来不知道现象是怎么样的)

请问各位大佬这种情况该怎么处理啊?添加重试功能?
还是像官方的处理一样添加ErrorBoundary

const ModuleA = React.lazy(() => {
    return new Promise((resolve: any, reject) => {
        import('moduleWrap')
            .then(module => {
                resolve(module)
            })
            .catch(err => {
                /****/
            })
    })
})

共有1个答案

刘和昶
2023-06-03

用 Error Boundaries 和重试:

import React, { Component, lazy, Suspense } from 'react';

// Error Boundary
class ErrorBoundary extends Component {
  state = { hasError: false };

  static getDerivedStateFromError(error) {
    return { hasError: true };
  }

  componentDidCatch(error, info) {
    // log the error to an error reporting service
  }

  render() {
    if (this.state.hasError) {
      return <h1>Something went wrong.</h1>;
    }

    return this.props.children; 
  }
}

// Retry logic
function withRetry(importPromise) {
  let retryCount = 0;
  function tryImport() {
    return importPromise().catch(error => {
      if (retryCount < 3) {
        retryCount++;
        return tryImport();
      }
      throw error;
    });
  }
  return tryImport();
}

// Lazy load the component
const LazyComponent = lazy(() => withRetry(() => import('./LazyComponent')));

// Use the lazy component
function MyComponent() {
  return (
    <ErrorBoundary>
      <Suspense fallback={<div>Loading...</div>}>
        <LazyComponent />
      </Suspense>
    </ErrorBoundary>
  );
}
 类似资料:
  • 我试图在react with typescript中创建一个登录表单。但setEmail方法不接受该值。它表示“string”类型的参数不能分配给“SetStateAction”类型的参数。我该怎么解决它?

  • swiper中的图片如何懒加载,还是根本不做懒加载? 求大佬指教!!!

  • 我有两个不同类型的对象,我想用一个对象指定另一个。 的接口有一个,而到

  • 问题内容: 我的应用程序具有以下结构: 我有一个包含一些脚本的功能文件夹,以及一个在ui.py文件上包含PyQt生成的代码的ui文件夹。 还有一个main.py文件,该文件加载ui.py以显示界面,并且ui.py从根目录的“ images”文件夹中加载一些图像。 如果我直接在python上执行脚本(main.py文件中为double clic),则图像不会显示。 但是,如果将终端与“ python

  • “java.lang.OutOfMemoryError” .我想是因为我用了毕加索在我的RecycleView适配器。 代码如下:

  • 本文向大家介绍Array.filter中如何正确使用Async,包括了Array.filter中如何正确使用Async的使用技巧和注意事项,需要的朋友参考一下 1. 如何仅保留满足异步条件的元素 在第一篇文章中,我们介绍了 async / await 如何帮助处理异步事件,但在异步处理集合时却无济于事。在本文中,我们将研究该filter函数,它可能是支持异步函数的最直观的方法。 2. Array.