当前位置:首页 > React

react如何实现路由懒加载

2026-01-25 02:50:23React

React 路由懒加载的实现方法

路由懒加载(Lazy Loading)通过动态导入(Dynamic Import)和 React 的 Suspense 组件实现,能有效减少初始加载时的资源体积。以下是具体实现方式:

使用 React.lazySuspense

React.lazy 允许动态导入组件,Suspense 提供加载中的占位内容:

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

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

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

动态导入的命名导出组件

若需懒加载命名导出的组件,需通过 then 链式调用:

const Settings = lazy(() => 
  import('./components/Settings').then(module => ({
    default: module.SettingsPanel
  }))
);

预加载优化

在用户可能访问的路由前触发预加载:

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

// 鼠标悬停导航链接时预加载
<Link 
  to="/about" 
  onMouseEnter={() => import('./components/About')}
>
  About
</Link>

错误边界处理

结合 ErrorBoundary 捕获懒加载失败:

react如何实现路由懒加载

class ErrorBoundary extends React.Component {
  state = { hasError: false };
  static getDerivedStateFromError() {
    return { hasError: true };
  }
  render() {
    return this.state.hasError ? <h1>Load failed</h1> : this.props.children;
  }
}

// 使用方式
<ErrorBoundary>
  <Suspense fallback={<Spinner />}>
    <LazyComponent />
  </Suspense>
</ErrorBoundary>

注意事项

  • 动态导入路径需为字符串字面量,不可使用变量。
  • Suspensefallback 需提供适当加载状态。
  • 生产环境下需确保打包工具(如 Webpack)支持代码分割。

分享给朋友:

相关文章

vue如何实现单选

vue如何实现单选

Vue 实现单选的方法 在 Vue 中实现单选功能可以通过多种方式完成,以下是几种常见的实现方法: 使用 v-model 绑定单选按钮 通过 v-model 绑定到同一个变量,确保同一时间只有一个选…

vue如何实现登录

vue如何实现登录

Vue 实现登录功能的方法 创建登录表单组件 在 Vue 项目中创建一个登录表单组件,通常命名为 Login.vue。表单包含用户名和密码输入框,以及提交按钮。 <template>…

vue如何实现截图

vue如何实现截图

Vue 实现截图的方法 在 Vue 中实现截图功能可以通过多种方式完成,以下是几种常见的实现方法: 使用 html2canvas 库 html2canvas 是一个流行的 JavaScript 库,…

java是如何实现跨平台的

java是如何实现跨平台的

Java 跨平台的实现原理 Java 实现跨平台的核心机制基于 “一次编写,到处运行” 的理念,主要通过以下技术实现: 字节码与 JVM Java 源代码编译后生成字节码(.class 文件),而非…

vue如何实现刷新

vue如何实现刷新

实现页面刷新的方法 在Vue中实现刷新功能可以通过以下几种方式实现: 使用location.reload() 直接调用浏览器的原生方法强制刷新整个页面: methods: { refr…

vue如何实现replaceAll

vue如何实现replaceAll

实现字符串全局替换的方法 在Vue中实现类似JavaScript的replaceAll功能,可以通过以下几种方式: 使用String.prototype.replaceAll()(ES2021+)…