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 就能实现服务端懒加载
 
