当前位置:首页 > 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 实现路由级懒加载,优化页面切换性能。

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 示例:

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() 实现按需加载。

react实现懒加载

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

注意事项

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

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

相关文章

如何react页面

如何react页面

创建 React 页面 使用 create-react-app 快速初始化项目: npx create-react-app my-app cd my-app npm start 基础页面结构 在 s…

react如何读

react如何读

React 的发音 React 的发音为 /riˈækt/(音标),读作“瑞-艾克特”。其中: “Re” 发音类似英文单词 “read” 的开头部分。 “act” 发音与英文单词 “act” 一致。…

react如何迭代

react如何迭代

在 React 中迭代数组或对象 React 提供了多种方式来处理数组或对象的迭代,以下是常见的方法: 使用 map 方法迭代数组 map 是 JavaScript 数组的内置方法,常用于在 Rea…

如何关闭react

如何关闭react

关闭React应用的步骤 在开发或运行React应用时,可能需要关闭正在运行的开发服务器或停止应用。以下是几种常见情况的处理方法: 停止开发服务器 如果正在使用npm start或yarn star…

react 如何精通

react 如何精通

掌握核心概念 深入理解React的基础概念,包括组件(函数组件与类组件)、状态(useState)、生命周期(useEffect)、Props传递、虚拟DOM与Diff算法。通过官方文档或《React…

react如何配置

react如何配置

配置React项目的基本步骤 安装Node.js和npm 确保系统已安装Node.js(包含npm)。可通过命令行检查版本: node -v npm -v 创建React项目 使用官方工具Creat…