代码分割 - React.lazy

本文介绍了如何通过import()语法和React.lazy进行代码分割,以优化应用性能。动态导入可以在需要时加载模块,减少初始加载时间。在React中,React.lazy配合Suspense组件可以实现组件的懒加载,同时提供加载提示。这种方式尤其适用于大型React应用,能提高首屏加载速度。
摘要由CSDN通过智能技术生成

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;

 

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

屏幕录制2020-11-15 上午12.21.44.2020-11-15 00_26_03.gif

 

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

对于react-router-dom v6,可以使用`lazy`函数来实现代码分割和懒加载路由组件。使用`lazy`函数,可以将路由组件的加载推迟到它们被实际访问时。这可以提高应用程序的性能,因为只有在需要时才会加载所需的组件。 要使用`lazy`函数,首先需要确保你的项目使用的是React 16.6或更高版本。然后,你可以按照以下步骤使用`lazy`函数: 1. 使用`import()`函数将路由组件装在动态导入的Promise中。例如:`const MyComponent = React.lazy(() => import('./MyComponent'))`。这将返回一个Promise,该Promise在组件被加载时将其解析为默认导出的组件。 2. 在你的路由配置中,使用`<Route>`组件的`component`属性来渲染动态导入的组件。例如:`<Route path="/my-route" component={MyComponent} />`。请注意,`component`属性接受一个函数,该函数返回一个动态导入的组件。 3. 在你的应用程序中,使用`React.Suspense`组件来含动态导入的路由组件的部分。这将在等待组件加载时显示一个加载指示器。例如:```jsx <React.Suspense fallback={<div>Loading...</div>}> <Switch> <Route path="/my-route" component={MyComponent} /> // 其他路由 </Switch> </React.Suspense> ``` 这样,当用户访问`/my-route`路径时,`MyComponent`将被动态地加载并渲染。 请注意,以上步骤适用于react-router-dom v6,使用不同版本的react-router-dom可能会有一些差异。因此,建议在阅读官方文档或相关文档之前,确保你了解你所使用的具体版本的react-router-dom的使用方法。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [react-router:react-router 中文文档](https://download.csdn.net/download/weixin_42166261/18230223)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [react-router-dom v6版本的详细配置与使用](https://blog.csdn.net/qq_51721168/article/details/131836926)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值