lazy 内置方法
lazy 是 React 提供的懒(动态)加载组件的方法 React.lazy()
参数
一个函数:动态导入组件 import()
(必须支持Promise)
好处
减少打包体积、对初次渲染不适用的组件延迟加载
Suspense
Suspense 悬念 担忧 忧虑,将来即将发生的事情给人带来担忧和悬念 组件能否加载出来呢?那不管了,我先有个 Loading 的界面出来,确定能加载后那我把组件加载出来
React 内置组件,使用 fallback props 把 lazy 后的组件 挂载到 React
给 lazy 加上 loading 指示器组件的一个容器组件
例子
loading.jsx (静态导入)
import React from 'react';
class Loading extends React.Component {
render(){
return <div>Loading ...</div>
}
}
export default Loading;
main.jsx
import React from 'react';
class Main extends React.Component {
render(){
return <div>MAIN</div>
}
}
export default Main;
index.jsx
import React from 'react';
import ReactDOM from 'react-dom';
import Loading from './loading.jsx'
const MainComponent = React.lazy(()=> import('./main.js'));
class App extends React.Component {
render(){
return (
<React.Suspense fallback={<Loading />}>
<div>
<MainComponent />
</div>
</React.Suspense>
)
}
}
ReactDOM.render(
<App />,
docuement.getElementById('app')
);
分析
lazy 接收一个动态导入组件的函数
该函数返回一个 Promise (IE 使用 ployfill)
Promise 会 reolve 一个默认导出的 React 组件 export default xxx
Suspense 目前只和 lazy 配合实现组件等待加载指示器的功能
服务端渲染 SSR
使用 Loadable Components
- 是一个 React 代码分割的库
- 预获取
- SSR
- 完全支持动态加载
- 使用时把 lazy 换成 loadable 就能实现服务端懒加载