当前位置:首页 > React

react如何异步加载

2026-01-23 17:07:20React

React 异步加载的实现方法

使用动态导入(Dynamic Import)结合 React.lazySuspense

动态导入是 ECMAScript 的特性,允许异步加载模块。React 提供了 React.lazy 函数,可以懒加载组件。

import React, { Suspense } from 'react';

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

function App() {
  return (
    <div>
      <Suspense fallback={<div>Loading...</div>}>
        <AsyncComponent />
      </Suspense>
    </div>
  );
}

Suspense 组件用于在异步组件加载时显示备用内容(如加载动画)。

自定义高阶组件(HOC)实现异步加载

react如何异步加载

可以封装一个高阶组件来处理异步加载逻辑,适用于需要更细粒度控制的场景。

import React, { useState, useEffect } from 'react';

function asyncComponent(importComponent) {
  return function AsyncWrapper(props) {
    const [Component, setComponent] = useState(null);

    useEffect(() => {
      importComponent().then((module) => {
        setComponent(() => module.default);
      });
    }, []);

    return Component ? <Component {...props} /> : <div>Loading...</div>;
  };
}

const AsyncComponent = asyncComponent(() => import('./AsyncComponent'));

使用第三方库如 loadable-components

@loadable/component 是社区流行的异步加载解决方案,支持服务端渲染(SSR)和更复杂的场景。

react如何异步加载

import loadable from '@loadable/component';

const AsyncComponent = loadable(() => import('./AsyncComponent'), {
  fallback: <div>Loading...</div>,
});

function App() {
  return <AsyncComponent />;
}

路由级别的异步加载(React Router)

在 React Router 中结合 React.lazy 实现路由级别的代码分割。

import { BrowserRouter as Router, Route, Switch } from 'react-router-dom';
import React, { Suspense } from 'react';

const Home = React.lazy(() => import('./routes/Home'));
const About = React.lazy(() => import('./routes/About'));

function App() {
  return (
    <Router>
      <Suspense fallback={<div>Loading...</div>}>
        <Switch>
          <Route exact path="/" component={Home} />
          <Route path="/about" component={About} />
        </Switch>
      </Suspense>
    </Router>
  );
}

注意事项

  • 异步加载的组件必须是默认导出(export default)。
  • React.lazy 目前不支持服务端渲染(SSR),需使用 loadable-components 替代。
  • 动态导入的路径需为静态字符串,不可动态拼接。

标签: 加载react
分享给朋友:

相关文章

如何手写一个react

如何手写一个react

手写一个简单的 React 创建一个基础的 React 实现需要理解其核心概念:虚拟 DOM、组件、状态管理和渲染。以下是一个简化版的 React 实现。 创建虚拟 DOM 虚拟 DOM 是真实 D…

react如何动画

react如何动画

React 动画实现方法 React 中实现动画可以通过多种方式,包括原生 CSS、第三方库或 React 内置的动画解决方案。以下是几种常见方法: 使用 CSS 动画和过渡 通过 CSS 的 tr…

如何同步react

如何同步react

同步React组件状态的方法 使用useState和useEffect钩子组合可以同步React组件的状态。useState用于声明状态变量,useEffect用于监听状态变化并执行副作用。 imp…

react 如何启动

react 如何启动

创建 React 项目 使用官方工具 create-react-app 快速初始化项目,需提前安装 Node.js(版本 ≥ 14.0.0)和 npm/yarn: npx create-react-…

react如何通信

react如何通信

React 组件通信方式 React 组件间的通信方式多样,具体选择取决于组件关系和场景需求。以下是常见方法: 父子组件通信 父组件通过 props 向子组件传递数据,子组件通过回调函数通知父组件…

react如何重写alert

react如何重写alert

重写 React 中的 alert 方法 在 React 中,直接使用原生 alert 会破坏用户体验,通常需要自定义弹窗组件替代。以下是实现方法: 使用自定义弹窗组件 创建可复用的弹窗组件,替代原…