ReactJS 教程

ReactJS 主页 ReactJS 简介 ReactJS 路线图 ReactJS 下载安装和环境配置 ReactJS 功能 ReactJS 优势和缺点 ReactJS 架构 ReactJS 创建 React 应用程序 ReactJS JSX ReactJS 组件 ReactJS 嵌套组件 ReactJS 使用组件 ReactJS 集合组件 ReactJS 样式 ReactJS 属性 (props) ReactJS 使用属性创建组件 ReactJS props 验证 ReactJS 构造函数 ReactJS 组件生命周期 ReactJS 事件管理 ReactJS 创建事件感知组件 ReactJS Expense Manager 事件 ReactJS 状态管理 ReactJS 状态管理 API ReactJS 无状态组件 ReactJS Hooks 进行状态管理 ReactJS Hooks 的组件生命周期 ReactJS 布局组件 ReactJS 分页 ReactJS Material UI ReactJS Http 客户端编程 ReactJS 表单编程 ReactJS 受控组件 ReactJS 非受控组件 ReactJS Formik ReactJS 条件渲染 ReactJS 列表 ReactJS Key 键 ReactJS 路由 ReactJS Redux ReactJS 动画 ReactJS Bootstrap ReactJS Map ReactJS 表格 ReactJS 使用 Flux 管理状态 ReactJS 测试 ReactJS CLI 命令 ReactJS 构建和部署 ReactJS 示例

Hooks

ReactJS Hooks 简介 ReactJS 使用 useState ReactJS 使用 useEffect ReactJS 使用 useContext ReactJS 使用 useRef ReactJS 使用 useReducer ReactJS 使用 useCallback ReactJS 使用 useMemo ReactJS 自定义 Hooks

ReactJS 高级

ReactJS 可访问性 ReactJS 代码拆分 ReactJS 上下文 ReactJS 错误边界 ReactJS 转发 Refs ReactJS 片段 ReactJS 高阶组件 ReactJS 与其他库集成 ReactJS 优化性能 ReactJS Profiler API ReactJS Portals ReactJS 不使用 ES6 ECMAScript ReactJS 不使用 JSX 的 React ReactJS Reconciliation ReactJS Refs 和 DOM ReactJS 渲染道具 ReactJS 静态类型检查 ReactJS 严格模式 ReactJS Web 组件

其他概念

ReactJS 日期选择器 ReactJS Helmet ReactJS 内联样式 ReactJS PropTypes ReactJS BrowserRouter ReactJS DOM ReactJS 轮播 ReactJS 图标 ReactJS 表单组件 ReactJS 参考 API

ReactJS 有用资源

ReactJS 快速指南 ReactJS 备忘录 Axios 备忘录 ReactJS 有用资源 ReactJS 讨论


ReactJS - lazy()

延迟加载是一种 React 方法,它允许我们延迟加载组件的代码,直到需要它为止。延迟加载允许我们在代码准备好使用时才加载特定的代码片段,而不是在程序启动时加载所有内容。

语法

import { lazy } from 'react';

const MyComponent = lazy(load)

参数

load − 它是一个返回 Promise 的函数。React 只会在我们第一次尝试渲染组件时调用此函数。

返回值

lazy 函数返回一个 React 组件供我们的程序使用。尝试在代码仍在加载时渲染代码将导致它暂停,我们可以使用 <Suspense>显示加载消息。

示例

示例 1

现在我们将创建一个具有延迟加载的完整应用程序,该应用程序需要多个文件和配置。这是一个使用延迟加载组件的 React 项目的简单示例。因此,我们将创建 2 个名为 ComponentA 和 ComponentB 的组件。然后我们将在名为 App 的主组件中调用这些组件。

ComponentA.js

import React from 'react';

const ComponentA = () => {
   return <div>This is Component A</div>;
};

export default ComponentA;

ComponentB.js

import React from 'react';

const ComponentB = () => {
return <div>This is Component B</div>;
};

export default ComponentB;

App.js

import React, { lazy, Suspense } from 'react';

const ComponentA = lazy(() => import('./ComponentA'));
const ComponentB = lazy(() => import('./ComponentB'));

const App = () => {
   return (
      <div>
         <h1>Lazy Loading App</h1>
         <Suspense fallback={<div>Loading...</div>}>
            <ComponentA />
            <ComponentB />
         </Suspense>
      </div>
   );
};

export default App;

输出

lazy loading app

在浏览器中,导航到 http://localhost:3000,我们应该会看到我们的延迟加载组件。

这是一个简单的例子,延迟加载通常用于较大的组件或路由以获得更好的性能。此外,对于多页应用程序中更复杂的延迟加载,请考虑利用 React Router 等技术。

示例 2

让我们创建一个基本的 React 应用程序,使用延迟加载方法呈现动态列表。我们将有一个主组件 (ItemList) 和将同时加载的单个项目组件。

// src/ItemList.js
import React, { lazy, Suspense } from 'react';
import Loading from './Loading';

// 延迟加载 Item 组件
const Item = lazy(() => delayForDemo(import('./Item')));

const itemsData = [
   { id: 1, name: 'Item 1' },
   { id: 2, name: 'Item 2' },
   { id: 3, name: 'Item 3' },
];

const ItemList = () => {
   return (
      <div>
         <h2>Item List</h2>
         <Suspense fallback={<Loading />}>
         {itemsData.map((item) => (
            <Item key={item.id} name={item.name} />
         ))}
         </Suspense>
      </div>
   );
};

export default ItemList;

// 添加固定延迟
function delayForDemo(promise) {
   return new Promise(resolve => {
      setTimeout(resolve, 2000);
   }).then(() => promise);
}

Loading.js

export default function Loading() {
   return <p><i>Loading...</i></p>;
}

src/App.js

import React from 'react';
import ItemList from './ItemList';

function App() {
   return (
      <div>
         <h1>Lazy Loading Example</h1>
         <ItemList />
      </div>
   );
}

export default App;

输出

延迟加载示例 延迟加载项目列表

在浏览器中,导航到 http://localhost:3000,我们应该看到延迟加载的项目列表。

此示例展示了如何使用延迟加载来提高应用程序的初始加载性能,尤其是在处理大量组件列表时。

示例 3

让我们创建另一个示例,其中我们将使用延迟方法来加载包含图像的组件。

LazyComponent.js

import React from 'react';

const LazyComponent = () => {
   return (
      <div>
         <p>This component contains a image:</p>
         <img
         src="https://via.placeholder.com/300"
         alt="Lazy Loaded Image"
         />
      </div>
   );
};

export default LazyComponent;

Loading.js

export default function Loading() {
   return <p><i>Loading...</i></p>;
}

App.js

import React, { lazy, Suspense } from 'react';
import './App.css'

// 延迟加载组件
const LazyComponent = lazy(() => delayForDemo(import('./LazyComponent')));

const App = () => {
   return (
      <div className='App'>
         <h1>Lazy Loading Example</h1>
         <p>This is the main component.</p>
         
         {/* Suspense to handle the lazy loading */}
         <Suspense fallback={<div>Loading...</div>}>
            <LazyComponent />
         </Suspense>
      </div>
   );
};

export default App;

// 添加固定延迟
function delayForDemo(promise) {
   return new Promise(resolve => {
      setTimeout(resolve, 2000);
   }).then(() => promise);
}

输出

main component

在此示例中,LazyComponent 组件包含从源加载的图像。我们使用惰性方法在 App 组件中加载此组件。

与之前一样,Suspense 组件处理惰性组件的异步加载,并在加载组件时显示回退 UI(在本例中为简单的"正在加载..."消息)。

摘要

React 中的惰性加载通过仅加载所需的代码来提高性能,从而使我们的应用更快、更高效。我们使用惰性加载方法创建了两个简单的应用程序。这些都是非常简单的示例,惰性加载经常用于较大的组件或路由以提高性能。

reactjs_reference_api.html