当前位置:首页 > React

react实现懒加载

2026-01-27 04:08:12React

React 实现懒加载的方法

使用 React.lazy 和 Suspense

React 16.6 及以上版本提供了 React.lazySuspense 实现组件懒加载。这种方式适用于动态导入组件,减少初始加载时间。

import React, { Suspense } from 'react';

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

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

Suspensefallback 属性用于指定加载中的占位内容。

路由懒加载(React Router)

在 React Router 中结合 React.lazy 实现路由级懒加载,优化页面切换性能。

react实现懒加载

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

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

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

图片懒加载

通过 Intersection Observer API 或第三方库(如 react-lazyload)实现图片懒加载,减少不必要的网络请求。

使用 react-lazyload 示例:

react实现懒加载

import LazyLoad from 'react-lazyload';
import placeholder from './placeholder.png';

function MyComponent() {
  return (
    <LazyLoad placeholder={<img src={placeholder} alt="placeholder" />}>
      <img src="actual-image.jpg" alt="Actual" />
    </LazyLoad>
  );
}

自定义懒加载钩子

通过自定义 Hook 结合 Intersection Observer API 实现通用懒加载逻辑。

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

function useLazyLoad() {
  const [isVisible, setIsVisible] = useState(false);
  const ref = useRef(null);

  useEffect(() => {
    const observer = new IntersectionObserver((entries) => {
      entries.forEach(entry => {
        if (entry.isIntersecting) {
          setIsVisible(true);
          observer.unobserve(entry.target);
        }
      });
    });

    if (ref.current) observer.observe(ref.current);

    return () => {
      if (ref.current) observer.unobserve(ref.current);
    };
  }, []);

  return [ref, isVisible];
}

function LazyImage({ src, alt }) {
  const [ref, isVisible] = useLazyLoad();

  return (
    <div ref={ref}>
      {isVisible ? <img src={src} alt={alt} /> : <div>Loading...</div>}
    </div>
  );
}

动态导入第三方库

对于非组件的懒加载(如大型库),可使用动态导入语法 import() 实现按需加载。

useEffect(() => {
  import('heavy-library').then((library) => {
    library.init();
  });
}, []);

注意事项

  • 懒加载的组件需为默认导出(export default)。
  • Suspense 目前不支持服务端渲染(SSR),需配合 Loadable Components 等库解决。
  • 图片懒加载需考虑占位符和错误处理,避免布局偏移。

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

相关文章

如何生成react代码

如何生成react代码

使用 Create React App 生成项目 安装 Node.js 后,通过命令行工具运行以下命令创建新项目: npx create-react-app my-app cd my-app npm…

react性能如何

react性能如何

React 性能特点 React 通过虚拟 DOM(Virtual DOM)和高效的 diff 算法优化性能。虚拟 DOM 减少了直接操作真实 DOM 的开销,仅在必要时更新变化的部分。React 的…

如何创建react

如何创建react

创建React项目的步骤 使用Create React App工具快速搭建React项目。确保已安装Node.js(版本需≥14.0.0)和npm(版本需≥5.6)。 打开终端或命令行工具,运行以下…

react如何浮动

react如何浮动

使用 CSS 实现浮动 在 React 中实现浮动效果可以通过 CSS 的 float 属性完成。在组件的样式文件或内联样式中直接设置 float: left 或 float: right。…

如何启动react

如何启动react

安装Node.js 确保系统已安装Node.js(建议使用LTS版本),可通过官网下载并安装。安装完成后,在终端运行以下命令验证版本: node -v npm -v 创建React项目 使用官方工具…

如何安装react

如何安装react

安装React的方法 方法一:使用Create React App(官方推荐) Create React App是官方提供的脚手架工具,适合快速搭建React项目。确保已安装Node.js(建议版本≥…