开始

React.lazy必须通过调用动态的import()加载一个函数,此时会返回一个Promise, 并解析(resolve)为一个带有包含React组件的默认导出的模块。 —— Reactjs官网

这里还需要说明两点:

  1. 需要使用标识符Suspense 来包裹子组件,以此让react 得知哪些内容是需要懒加载的;
  2. Suspense的属性fallback不能为空,fallback属性存放等待子组件加载时呈现出的元素;

实例

父组件

  1. import React, { useState, lazy, Suspense } from 'react';
  2. import { Button } from 'antd';
  3. const Test = lazy(() => import('./test'));
  4. const App = () => {
  5. const [visible, setVisible] = useState<boolean>(false);
  6. return (
  7. <>
  8. <Button
  9. type="primary"
  10. onClick={() => {
  11. setVisible(true);
  12. }}
  13. >
  14. 切换
  15. </Button>
  16. {visible && (
  17. <Suspense fallback={<div>Loading...</div>}>
  18. <Test />
  19. </Suspense>
  20. )}
  21. )
  22. </>
  23. );
  24. };
  25. export default App;

子组件(一个普通的子组件)

  1. import React, { useEffect } from 'react';
  2. const TestView = () => {
  3. useEffect(() => {
  4. console.log('子组件的渲染');
  5. }, []);
  6. return <div>我是测试的页面</div>;
  7. };
  8. export default TestView;

image.png

参考

  1. React 之实战总结