当前位置:首页 > 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 的魔法注释自定义分块名称,便于识别和管理代码块。

如何实现react路由的懒加载

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

分享给朋友:

相关文章

vue 路由实现

vue 路由实现

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

vue路由实现内部切换

vue路由实现内部切换

Vue路由实现内部切换的方法 Vue Router是Vue.js官方的路由管理器,用于构建单页面应用(SPA)。以下是几种常见的路由切换方式: 使用<router-link>组件 &l…

权限管理vue如何实现

权限管理vue如何实现

基于路由的权限控制 在Vue中可以通过路由守卫实现页面级权限控制。定义路由时添加meta字段标记权限角色: const routes = [ { path: '/admin',…

vue如何实现两栏布局

vue如何实现两栏布局

使用Flexbox实现两栏布局 Flexbox是CSS3中强大的布局方式,可以轻松实现两栏布局。在Vue中可以直接在组件的style标签中使用。 <template> <div…

vue如何实现排序

vue如何实现排序

实现数组排序 在Vue中可以通过计算属性或方法对数组进行排序。使用JavaScript的sort()方法结合Vue的响应式特性实现动态排序。 data() { return { item…

java如何实现多继承

java如何实现多继承

在Java中,由于语言设计本身不支持多继承(即一个类不能直接继承多个父类),但可以通过以下方式间接实现类似多继承的效果: 使用接口实现多继承 接口允许一个类实现多个接口,从而继承多个抽象行为。接口中…