react懒加载(lazy, Suspense)

Posted 胖鹅68

tags:

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

文章目录

一、参考

  1. react官方文档 —— React.lazy
  2. 自定义 React懒加载组件、全局定义方法(组件、变量)

二、API 介绍

2.1 React.lazy()

  1. React.lazy 接受一个函数,这个函数需要动态调用 import()。

  2. 它必须返回一个 Promise,该 Promise 需要 resolve 一个 default export 的 React 组件。

使用之前:

import OtherComponent from './OtherComponent';

使用之后:

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

2.2 <Suspense> 组件

  1. React.lazy() 加载的组件只能在 组件中渲染

    目的:使得我们可以使用在等待加载 lazy 组件时做优雅降级(如 loading 指示器等)。

  2. fallback 属性

    接受任何在组件加载过程中你想展示的 React 元素。即在加载异步组件显示之前先显示的内容

三、案例

3.1 配合路由使用

import React,  Component,lazy,Suspense from 'react'
import NavLink,Route from 'react-router-dom'

// import Home from './Home'
// import About from './About'

import Loading from './Loading'
const Home = lazy(()=> import('./Home') )
const About = lazy(()=> import('./About'))

export default class Demo extends Component 
	render() 
		return (
			<div>
				<div className="row">
					<div className="col-xs-offset-2 col-xs-8">
						<div className="page-header"><h2>React Router Demo</h2></div>
					</div>
				</div>
				<div className="row">
					<div className="col-xs-2 col-xs-offset-2">
						<div className="list-group">
							/* 在React中靠路由链接实现切换组件--编写路由链接 */
							<NavLink className="list-group-item" to="/about">About</NavLink>
							<NavLink className="list-group-item" to="/home">Home</NavLink>
						</div>
					</div>
					<div className="col-xs-6">
						<div className="panel">
							<div className="panel-body">
								<Suspense fallback=<Loading/>>
									/* 注册路由 */
									<Route path="/about" component=About/>
									<Route path="/home" component=Home/>
								</Suspense>
							</div>
						</div>
					</div>
				</div>
			</div>
		)
	

3.2 官方例子

import React,  Suspense  from 'react';

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

function MyComponent() 
  return (
    <div>
      <Suspense fallback=<div>Loading...</div>>
        <section>
          <OtherComponent />
          <AnotherComponent />
        </section>
      </Suspense>
    </div>
  );

四、注意

React.lazy 和 Suspense 技术还不支持服务端渲染。

以上是关于react懒加载(lazy, Suspense)的主要内容,如果未能解决你的问题,请参考以下文章

react懒加载(lazy, Suspense)

react之Lazy和Suspense(懒加载)

React.lazy和Suspense组合实现组件懒加载

react 懒加载

react 懒加载

react 懒加载