当前位置:首页 > 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如何实现两栏布局

使用 Flexbox 实现两栏布局 通过 Flexbox 可以快速实现两栏布局,适合现代浏览器。在 Vue 的模板中,使用 display: flex 和 flex 属性控制两栏的宽度比例。 <…

vue如何实现mvvm

vue如何实现mvvm

Vue 实现 MVVM 的核心机制 Vue 的 MVVM(Model-View-ViewModel)实现依赖于数据绑定和响应式系统,通过以下核心机制完成: 数据劫持(响应式系统) Vue 使用 Ob…

vue实现路由守卫

vue实现路由守卫

路由守卫的基本概念 路由守卫是 Vue Router 提供的一种机制,用于在路由跳转前后执行特定的逻辑。通过路由守卫,可以实现权限控制、页面访问限制、数据预加载等功能。 全局前置守卫 使用 rou…

vue 路由实现

vue 路由实现

Vue 路由实现方法 Vue Router 是 Vue.js 的官方路由管理器,用于构建单页面应用(SPA)。以下是实现 Vue 路由的基本步骤: 安装 Vue Router 使用 npm 或 y…

vue实现路由导航

vue实现路由导航

Vue 路由导航的实现 Vue 中实现路由导航通常使用 Vue Router 库。以下是具体实现方法: 安装 Vue Router 在项目中安装 Vue Router 依赖: npm instal…

vue如何实现冒泡

vue如何实现冒泡

Vue 实现冒泡排序的步骤 在 Vue 中实现冒泡排序,可以通过数据绑定和计算属性来动态展示排序过程。以下是一个完整的实现示例。 示例代码 <template> <div>…