当前位置:首页 > React

react如何实现路由懒加载

2026-03-11 11:49:36React

使用React.lazy和Suspense实现懒加载

React.lazy函数允许动态导入组件,实现按需加载。Suspense组件用于在懒加载组件加载过程中显示备用内容。

import React, { Suspense, lazy } from 'react';
import { BrowserRouter as Router, Route, Switch } 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>}>
        <Switch>
          <Route exact path="/" component={Home} />
          <Route path="/about" component={About} />
        </Switch>
      </Suspense>
    </Router>
  );
}

路由配置中使用懒加载

在React Router v6中,可以通过路由配置对象实现懒加载:

react如何实现路由懒加载

import { lazy } from 'react';
import { Routes, Route } from 'react-router-dom';

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

const App = () => (
  <Routes>
    <Route path="/" element={<Layout />}>
      <Route index element={<Home />} />
      <Route path="about" element={<About />} />
    </Route>
  </Routes>
);

自定义懒加载高阶组件

创建高阶组件封装加载状态和错误处理:

import React, { Suspense } from 'react';

function lazyLoad(importFunc, fallback = null) {
  const LazyComponent = React.lazy(importFunc);

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

// 使用方式
const Home = lazyLoad(() => import('./Home'));

预加载策略优化

在用户可能访问的路径上预先加载组件,提升用户体验:

react如何实现路由懒加载

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

// 鼠标悬停时预加载
const preloadRoutes = () => {
  Home.preload();
  About.preload();
};

// 在导航组件中添加鼠标悬停事件
<NavLink onMouseEnter={() => import('./About')}>About</NavLink>

错误边界处理

结合错误边界组件捕获懒加载过程中的错误:

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;
  }
}

// 使用方式
<ErrorBoundary>
  <Suspense fallback={<div>Loading...</div>}>
    <LazyComponent />
  </Suspense>
</ErrorBoundary>

Webpack动态导入注释

使用Webpack的魔法注释为分割的chunk命名:

const Home = lazy(() => import(/* webpackChunkName: "home" */ './Home'));
const About = lazy(() => import(/* webpackChunkName: "about" */ './About'));

这会生成单独的文件如home.chunk.js和about.chunk.js,便于缓存管理和调试。

分享给朋友:

相关文章

vue如何实现原理

vue如何实现原理

Vue 的核心实现原理 Vue 的核心原理主要包括响应式系统、虚拟 DOM、模板编译和组件化。以下分模块详细说明其实现机制。 响应式系统 Vue 2.x 使用 Object.defineProper…

vue如何实现分离

vue如何实现分离

Vue 实现组件分离的方法 Vue 可以通过多种方式实现组件分离,提升代码的可维护性和复用性。以下是几种常见的方法: 单文件组件 (SFC) Vue 的单文件组件(.vue 文件)将模板、脚本和样式…

vue实现路由导航

vue实现路由导航

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

如何实现vue表格联动

如何实现vue表格联动

实现 Vue 表格联动的方法 数据绑定与响应式更新 通过 Vue 的响应式特性,将多个表格的数据绑定到同一个数据源或计算属性。当一个表格的数据发生变化时,另一个表格会自动更新。例如: data()…

vue如何实现分离

vue如何实现分离

Vue 实现代码分离的方法 Vue 提供了多种方式实现代码分离,提升项目的可维护性和模块化程度。以下是常见的几种方法: 组件化开发 将功能拆分为独立的 Vue 组件,每个组件包含自己的模板、逻辑和样…

vue如何实现404

vue如何实现404

实现 Vue 404 页面的方法 在 Vue 中实现 404 页面通常需要结合路由配置和动态路由匹配。以下是几种常见方法: 使用通配符路由匹配 在 Vue Router 配置中,可以通过 * 通配符…