代码分割 - React.lazy

Posted 耳东蜗牛

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了代码分割 - React.lazy相关的知识,希望对你有一定的参考价值。

import()

在你的应用中引入代码分割的最佳方式是通过动态 import() 语法。

 

使用之前:

import  add  from './math';
console.log(add(16, 26));

 

使用之后:

import("./math").then(math => 
  console.log(math.add(16, 26));
);

当 Webpack 解析到该语法时,会自动进行代码分割。如果你使用 Create React App,该功能已开箱即用,你可以立刻使用该特性

 

React.lazy

React.lazy 函数能让你像渲染常规组件一样处理动态引入(的组件)。

 

使用之前:

import OtherComponent from './OtherComponent';

 

使用之后:

const OtherComponent = React.lazy(() => import('./OtherComponent'));

 

此代码将会在组件首次渲染时,自动导入包含 OtherComponent 组件的包。

React.lazy 接受一个函数,这个函数需要动态调用 import()。它必须返回一个 Promise,该 Promise 需要 resolve 一个 defalut export 的 React 组件。

然后应在 Suspense 组件中渲染 lazy 组件,如此使得我们可以使用在等待加载 lazy 组件时做优雅降级(如 loading 指示器等)。

 

例子:

import React,  Suspense  from 'react';

const OtherComponent1 = React.lazy(() => new Promise(resolve =>
  setTimeout(() => resolve(import('./OtherComponent') ),
    3000
  )
));

const MyComponent = () => 
  return (
    <div>
      <Suspense fallback=<div>Loading...</div>>
        <OtherComponent1 />
      </Suspense>
    </div>
  );


export default MyComponent;
import React from 'react';

const OtherComponent = () => 
  return (
    <div>
      OtherComponent
    </div>
  );


export default OtherComponent;

 

看一下实际的效果:注意观察右边的文件加载:

 

我们可以看到OtherComponent文件是动态加载的。

以上是关于代码分割 - React.lazy的主要内容,如果未能解决你的问题,请参考以下文章

React.lazy与Suspence实现延迟加载

如何使用React.lazy和Suspense进行组件延迟加载

React.lazy 和 react-hot-loader 遇到的两个坑

如何在 React.lazy 和 Suspense 中获取加载进度

用React.lazy和Suspense优化React代码打包

react s-s-r 与代码拆分而不是 React.Lazy 的优缺点