当前位置:首页 > 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() 实现按需加载。

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

注意事项

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

react实现懒加载

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

相关文章

react 如何引入css

react 如何引入css

在 React 中引入 CSS 的方法 React 提供了多种引入 CSS 的方式,可以根据项目需求选择合适的方法。以下是常见的几种方式: 内联样式 内联样式直接在组件中通过 style 属性定义…

vue 实现异步加载

vue 实现异步加载

Vue 实现异步加载的方法 使用动态 import 实现组件懒加载 在 Vue 中可以通过动态 import() 语法实现组件的异步加载,这会使得组件在需要时才被加载,减少初始加载时间。 cons…

react 如何执行

react 如何执行

安装 Node.js 和 npm React 开发需要 Node.js 环境,因为它提供了 npm(或 yarn)包管理工具。从 Node.js 官网 下载并安装最新 LTS 版本。安装完成后,在终端…

react如何取消渲染

react如何取消渲染

取消渲染的方法 在React中,取消渲染通常指的是在某些条件下阻止组件渲染或中断正在进行的渲染过程。以下是几种常见的方法: 条件渲染 通过条件判断决定是否渲染组件或部分内容。可以使用if语句或三元运…

电脑如何安装react

电脑如何安装react

安装 Node.js 和 npm React 依赖于 Node.js 和 npm(Node Package Manager)。从 Node.js 官网下载并安装最新稳定版本,安装完成后会自动包含 np…

react 如何引入jquery

react 如何引入jquery

引入 jQuery 到 React 项目 在 React 项目中引入 jQuery 可以通过多种方式实现,但需要注意 React 和 jQuery 操作 DOM 的方式可能冲突,因此建议仅在必要时使用…