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