当前位置:首页 > React

react懒加载如何放默认图

2026-01-26 00:03:39React

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

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

使用loading属性与onError事件

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

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

结合Intersection Observer自定义懒加载

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

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背景图,可通过动态类名控制:

react懒加载如何放默认图

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中monent如何获取日期

react中monent如何获取日期

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

react如何取消渲染

react如何取消渲染

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

如何优化react

如何优化react

优化 React 性能的方法 使用 React.memo 或 PureComponent 对于函数组件,使用 React.memo 进行记忆化,避免不必要的重新渲染。类组件可以使用 PureCompo…

react如何查

react如何查

React 查询方法 React 提供了多种查询 DOM 元素的方式,以下是几种常见的方法: 使用 ref 通过 useRef 钩子可以获取 DOM 节点的引用,适用于直接操作 DOM 的场景。…

react如何遍历

react如何遍历

遍历数组或对象的方法 在React中,遍历数组或对象通常用于渲染列表或动态生成内容。以下是几种常见的遍历方法: 使用map遍历数组map是遍历数组并返回新数组的高阶函数,适合渲染列表。 con…

react如何同步

react如何同步

React 同步状态管理方法 在 React 中实现同步状态管理,可以通过以下多种方式实现: 使用 useState 和 useEffect 钩子 通过 useState 定义状态,使用 useEf…