当前位置:首页 > React

如何实现react路由的懒加载

2026-01-25 21:44:19React

使用 React.lazy 和 Suspense

React.lazy 函数允许动态导入组件,结合 Suspense 组件实现懒加载。Suspense 提供加载中的回退 UI。

import React, { Suspense } from 'react';
const LazyComponent = React.lazy(() => import('./LazyComponent'));

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

结合 React Router 使用

在 React Router 中,可以将懒加载组件作为路由配置的一部分。适用于路由级代码分割。

import { BrowserRouter as Router, Route, Routes } from 'react-router-dom';

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

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

预加载优化

通过预加载策略提升用户体验,例如在用户悬停时提前加载目标路由组件。

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

function App() {
  const preloadAbout = () => {
    import('./About');
  };

  return (
    <div onMouseEnter={preloadAbout}>
      <Suspense fallback={<div>Loading...</div>}>
        <About />
      </Suspense>
    </div>
  );
}

动态导入命名导出

对于具名导出的组件,需通过动态导入的 then 方法处理模块对象。

const LazyComponent = React.lazy(() =>
  import('./LazyComponent').then(module => ({
    default: module.NamedExport
  }))
);

错误边界处理

使用错误边界捕获懒加载过程中的异常,避免整个应用崩溃。

class ErrorBoundary extends React.Component {
  state = { hasError: false };

  static getDerivedStateFromError() {
    return { hasError: true };
  }

  render() {
    if (this.state.hasError) {
      return <h1>加载失败</h1>;
    }
    return this.props.children;
  }
}

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

Webpack 魔法注释

通过 Webpack 的魔法注释自定义分块名称,便于识别和管理代码块。

const LazyComponent = React.lazy(() =>
  import(/* webpackChunkName: "custom-name" */ './LazyComponent')
);

如何实现react路由的懒加载

分享给朋友:

相关文章

vue如何实现登录

vue如何实现登录

实现登录功能的基本步骤 使用Vue实现登录功能通常需要结合后端API、状态管理以及路由控制。以下是常见的实现方式: 创建登录表单组件 在Vue组件中构建包含用户名和密码输入框的表单: <te…

h5响应式布局如何实现

h5响应式布局如何实现

使用媒体查询(Media Queries) 通过CSS媒体查询针对不同屏幕尺寸设置不同的样式规则。例如: @media screen and (max-width: 768px) { .co…

vue如何实现重新实现主题

vue如何实现重新实现主题

Vue 主题切换的实现方法 使用 CSS 变量动态切换主题 定义主题相关的 CSS 变量,通过修改这些变量实现主题切换。在根元素(如 :root)中定义默认主题的变量,在特定类名下定义其他主题的变量。…

vue路由实现iframe

vue路由实现iframe

Vue 路由实现 iframe 的方法 在 Vue 项目中,可以通过路由配置和组件的方式实现 iframe 的嵌入。以下是具体实现步骤: 创建 iframe 组件 新建一个 Vue 组件用于承载 i…

react路由如何使用

react路由如何使用

React 路由的基本使用 React 路由通常通过 react-router-dom 库实现,用于管理单页面应用(SPA)中的页面导航。 安装 react-router-dom: npm i…

java如何实现异步

java如何实现异步

Java实现异步的方法 Java中实现异步编程可以通过多种方式,每种方式适用于不同的场景和需求。以下是常见的实现方法: 使用Thread类 创建新线程执行异步任务是最基础的方式。通过继承Threa…