当前位置:首页 > React

react懒加载实现

2026-01-27 08:14:03React

使用 React.lazy 和 Suspense

React 提供了 React.lazySuspense 来实现组件的懒加载。React.lazy 允许动态导入组件,而 Suspense 用于在加载过程中显示回退内容。

import React, { Suspense } from 'react';

const LazyComponent = React.lazy(() => import('./LazyComponent'));

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

结合路由懒加载

在 React Router 中,可以通过 React.lazy 实现路由级别的懒加载,优化页面加载性能。

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

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

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

自定义懒加载高阶组件

如果需要更灵活的懒加载逻辑,可以封装一个高阶组件(HOC)来实现。

import React, { useState, useEffect } from 'react';

function withLazyLoad(importComponent) {
  return function LazyLoadComponent(props) {
    const [Component, setComponent] = useState(null);

    useEffect(() => {
      importComponent().then((module) => {
        setComponent(() => module.default);
      });
    }, []);

    return Component ? <Component {...props} /> : <div>Loading...</div>;
  };
}

const LazyComponent = withLazyLoad(() => import('./LazyComponent'));

function App() {
  return <LazyComponent />;
}

动态导入与代码分割

通过动态导入(Dynamic Import)结合 Webpack 的代码分割功能,可以进一步优化懒加载的性能。

const loadComponent = () => import('./LazyComponent');

function App() {
  const [Component, setComponent] = useState(null);

  const handleClick = () => {
    loadComponent().then((module) => {
      setComponent(() => module.default);
    });
  };

  return (
    <div>
      <button onClick={handleClick}>Load Component</button>
      {Component && <Component />}
    </div>
  );
}

预加载懒加载组件

为了提高用户体验,可以在空闲时预加载懒加载组件。

import React, { Suspense } from 'react';

const LazyComponent = React.lazy(() => import('./LazyComponent'));

// 预加载组件
const preloadLazyComponent = () => {
  import('./LazyComponent');
};

function App() {
  return (
    <div>
      <button onClick={preloadLazyComponent}>Preload Component</button>
      <Suspense fallback={<div>Loading...</div>}>
        <LazyComponent />
      </Suspense>
    </div>
  );
}

注意事项

懒加载的组件必须导出为 default,否则会报错。动态导入的模块需要确保路径正确。

react懒加载实现

// LazyComponent.js 必须导出为 default
export default function LazyComponent() {
  return <div>Lazy Loaded Component</div>;
}

标签: 加载react
分享给朋友:

相关文章

如何记忆react

如何记忆react

理解核心概念 React的核心概念包括组件、状态(state)、属性(props)、生命周期方法(类组件)和钩子(函数组件)。掌握这些基础概念是记忆React的关键。组件是React应用的构建块,分为…

react如何验证

react如何验证

表单验证方法 在React中验证表单数据通常使用以下几种方式: 内置HTML5验证 利用HTML5原生表单验证属性如required、pattern等,结合form.noValidate属性禁用浏览…

如何同步react

如何同步react

同步React组件状态的方法 使用useState和useEffect钩子组合可以同步React组件的状态。useState用于声明状态变量,useEffect用于监听状态变化并执行副作用。 imp…

react如何分

react如何分

React 分页实现方法 在 React 中实现分页功能可以通过多种方式完成,以下是几种常见的方法: 使用状态管理分页数据 在组件内部维护当前页码和每页数据量的状态,通过计算切片数据实现分页。…

jquery加载

jquery加载

jQuery 加载方法 使用 CDN 加载 jQuery 推荐通过公共 CDN(如 Google、Microsoft 或 jQuery 官方)加载,速度快且可能已被浏览器缓存。 <scri…

react如何减少setState

react如何减少setState

减少 React 中 setState 调用的方法 合并多次状态更新 使用函数式更新方式合并多次 setState 调用。React 会将多次状态更新批量处理,避免不必要的重新渲染。 // 非函…