当前位置:首页 > 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如何拓展

react如何拓展

React 拓展方法 使用高阶组件(HOC) 高阶组件是一种复用组件逻辑的方式,通过接收一个组件并返回一个新组件实现功能拓展。例如,为组件添加日志功能: function withLogging…

react如何下载

react如何下载

安装 React 的步骤 通过 npm 或 yarn 安装 React,确保已安装 Node.js(版本建议 ≥ 14.0.0)。打开终端或命令行工具,运行以下命令: npx create-reac…

react如何分

react如何分

React 分页实现方法 在 React 中实现分页功能可以通过多种方式完成,以下是几种常见的方法: 使用状态管理分页数据 在组件内部维护当前页码和每页数据量的状态,通过计算切片数据实现分页。…

react如何创建项目

react如何创建项目

使用 Create React App 创建项目 Create React App (CRA) 是官方推荐的 React 项目脚手架工具,适合快速初始化一个现代化的 React 项目。 安装 C…

react如何提交表单

react如何提交表单

表单提交的基本方法 在React中提交表单通常通过控制组件状态和事件处理实现。表单数据通过onSubmit事件捕获,并阻止默认提交行为以避免页面刷新。 import { useState } fro…

react如何上传图片

react如何上传图片

使用input标签上传图片 在React中可以通过HTML的<input type="file">元素实现图片上传功能。创建一个受控组件来管理文件选择状态: function Image…