当前位置:首页 > React

react懒加载如何放默认图

2026-01-26 00:03:39React

实现React懒加载时设置默认图的方法

在React中实现懒加载(Lazy Loading)时,可以通过以下方式设置默认占位图,优化用户体验并避免布局偏移。

使用loading属性与onError事件

对于原生<img>标签,可直接通过loading="lazy"启用懒加载,并配合onError事件回退到默认图:

react懒加载如何放默认图

<img
  src="实际图片URL"
  loading="lazy"
  onError={(e) => {
    e.target.src = "默认图URL";
    e.target.onerror = null; // 防止循环报错
  }}
  alt="描述文字"
/>

结合Intersection Observer自定义懒加载

通过Intersection Observer API监听元素可见性,动态加载图片:

react懒加载如何放默认图

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

function LazyImage({ src, alt, placeholder }) {
  const imgRef = useRef();
  const [isLoaded, setIsLoaded] = useState(false);

  useEffect(() => {
    const observer = new IntersectionObserver((entries) => {
      entries.forEach(entry => {
        if (entry.isIntersecting && !isLoaded) {
          const img = new Image();
          img.src = src;
          img.onload = () => setIsLoaded(true);
          img.onerror = () => setIsLoaded(false); // 加载失败保持占位图
          observer.unobserve(entry.target);
        }
      });
    });

    if (imgRef.current) observer.observe(imgRef.current);
    return () => observer.disconnect();
  }, [src, isLoaded]);

  return (
    <img
      ref={imgRef}
      src={isLoaded ? src : placeholder}
      alt={alt}
      onError={(e) => {
        e.target.src = placeholder;
        e.target.onerror = null;
      }}
    />
  );
}

使用第三方库(如react-lazy-load-image-component

通过库提供的<LazyLoadImage>组件快速实现:

import { LazyLoadImage } from 'react-lazy-load-image-component';
import 'react-lazy-load-image-component/src/effects/blur.css';

function MyComponent() {
  return (
    <LazyLoadImage
      src="实际图片URL"
      placeholderSrc="默认图URL"
      effect="blur" // 可选模糊过渡效果
      onError={(e) => {
        e.target.src = "默认图URL";
      }}
    />
  );
}

CSS背景图懒加载方案

对于CSS背景图,可通过动态类名控制:

function LazyDiv({ imageUrl, placeholder }) {
  const [loaded, setLoaded] = useState(false);

  useEffect(() => {
    const img = new Image();
    img.src = imageUrl;
    img.onload = () => setLoaded(true);
    img.onerror = () => setLoaded(false);
  }, [imageUrl]);

  return (
    <div 
      className={`lazy-bg ${loaded ? 'loaded' : ''}`}
      style={{ 
        backgroundImage: loaded ? `url(${imageUrl})` : `url(${placeholder})` 
      }}
    />
  );
}

关键注意事项

  • 错误处理:始终为onError事件添加处理逻辑,避免因图片加载失败导致空白。
  • 性能优化:压缩默认图体积,建议使用Base64内联小图(<2KB)。
  • SEO友好:确保默认图的alt属性描述准确,不影响无障碍访问。
  • 布局稳定:为懒加载容器设置固定宽高或比例,防止内容跳动。

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

相关文章

react 如何引入jquery

react 如何引入jquery

安装 jQuery 库 在 React 项目中引入 jQuery 的第一步是安装 jQuery。可以通过 npm 或 yarn 安装: npm install jquery # 或 yarn…

vue加载动画实现

vue加载动画实现

Vue 加载动画的实现方法 在 Vue 中实现加载动画可以通过多种方式完成,以下是一些常见的方法: 使用 CSS 动画 通过 CSS 定义动画效果,结合 Vue 的动态类绑定或条件渲染控制动画的显示…

vue 实现异步加载

vue 实现异步加载

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

vue滚动加载实现

vue滚动加载实现

vue滚动加载实现 滚动加载是一种常见的优化手段,通过监听滚动事件动态加载数据,减少初始渲染压力。以下是几种实现方式: 使用IntersectionObserver API Intersection…

如何评价react native

如何评价react native

React Native 的优势 跨平台开发效率高:基于 JavaScript 和 React 语法,可同时开发 iOS 和 Android 应用,减少重复代码量。性能接近原生:通过原生组件渲染,性能…

react中monent如何获取日期

react中monent如何获取日期

使用 Moment.js 获取当前日期 在 React 中通过 Moment.js 获取当前日期,可以直接调用 moment() 函数。它会返回包含当前日期和时间的 Moment 对象。 impo…