当前位置:首页 > 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 Router 结合 CSS 过渡动画 在 Vue Router 的路由视图组件 <router-view> 上添加过渡效果,结合 CSS 实…

vue如何实现tap

vue如何实现tap

实现Tap事件的方法 在Vue中实现类似移动端的tap事件(轻触)可以通过以下几种方式完成。原生移动端浏览器通常通过touchstart和touchend事件组合模拟tap,而Vue中可以封装自定义指…

vue实现路由

vue实现路由

Vue 路由的实现方法 Vue 中实现路由通常使用 Vue Router 库。以下是具体的实现步骤: 安装 Vue Router 在项目中通过 npm 或 yarn 安装 Vue Router:…

vue如何实现登录

vue如何实现登录

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

vue如何实现id

vue如何实现id

Vue 中实现 ID 的方法 在 Vue 中,可以通过多种方式为元素或组件分配唯一的 ID。以下是几种常见的方法: 使用 v-bind 绑定 ID 通过 v-bind 动态绑定 ID,可以在模板中直…

vue如何实现select

vue如何实现select

Vue 实现 Select 组件的方法 在 Vue 中实现 Select 组件可以通过原生 HTML <select> 元素或使用第三方 UI 库(如 Element UI、Ant Des…