You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用React.lazy加载图片出现src="[object Object]"且图片无法加载

问题分析与解决方案

核心错误

React.lazy 是用来懒加载React组件的,不是用来导入图片这类静态资源的。你用它导入图片时,得到的是一个模块对象,直接把这个对象赋值给<img>的src属性,就会显示[object Object]——因为src需要的是字符串格式的图片路径,而不是对象。


解决方案

方案1:常规导入图片(不需要懒加载)

直接导入图片文件,webpack会自动处理成路径字符串,直接赋值给src即可:

import React from 'react';
import '../style/App.css';
// 直接导入图片,得到路径字符串
import macbookImage from '../img/macbook.png';

function App() {
  return (
    <>
      <header>
        <div className="container">
          <div className="items-left">
            <h1>Lorem ipsum</h1>
            <div>Lorem ipsum ipsum ipsum ipsum ipsum ipsum ipsum ipsum ipsum ipsum ipsum </div>
            <button>Se connecter</button>
            <button>En savoir plus</button>
          </div>
          <div className="items-right">
            <img src={macbookImage} height="10px" width="10" alt="Macbook"/>
          </div>
        </div>
      </header>
      <footer></footer>
    </>
  );
}

export default App;

方案2:动态懒加载图片(适合大图片按需加载)

如果需要懒加载图片,可以用动态import获取图片路径,结合状态管理实现加载状态:

import React, { useState, useEffect } from 'react';
import '../style/App.css';

function App() {
  const [imageSrc, setImageSrc] = useState(null);

  useEffect(() => {
    // 动态导入图片模块,取default属性拿到路径字符串
    import('../img/macbook.png').then(module => {
      setImageSrc(module.default);
    });
  }, []);

  return (
    <>
      <header>
        <div className="container">
          <div className="items-left">
            <h1>Lorem ipsum</h1>
            <div>Lorem ipsum ipsum ipsum ipsum ipsum ipsum ipsum ipsum ipsum ipsum ipsum </div>
            <button>Se connecter</button>
            <button>En savoir plus</button>
          </div>
          <div className="items-right">
            {/* 加载完成前显示占位内容 */}
            {imageSrc ? (
              <img src={imageSrc} height="10px" width="10" alt="Macbook"/>
            ) : (
              <div>Chargement...</div>
            )}
          </div>
        </div>
      </header>
      <footer></footer>
    </>
  );
}

export default App;

方案3:用React.lazy封装图片组件(结合Suspense)

如果想继续用Suspense做加载占位,可以把图片封装成独立组件,再用React.lazy懒加载这个组件:

  1. 新建LazyImage.js文件:
import React from 'react';
import macbookImage from '../img/macbook.png';

export default function LazyImage() {
  return <img src={macbookImage} height="10px" width="10" alt="Macbook"/>;
}
  1. 在App组件中使用:
import React, { Suspense } from 'react';
import '../style/App.css';

// 懒加载图片组件
const LazyImage = React.lazy(() => import('./LazyImage'));

function App() {
  return (
    <Suspense fallback={<div>Chargement...</div>}>
      <header>
        <div className="container">
          <div className="items-left">
            <h1>Lorem ipsum</h1>
            <div>Lorem ipsum ipsum ipsum ipsum ipsum ipsum ipsum ipsum ipsum ipsum ipsum </div>
            <button>Se connecter</button>
            <button>En savoir plus</button>
          </div>
          <div className="items-right">
            <LazyImage />
          </div>
        </div>
      </header>
      <footer></footer>
    </Suspense>
  );
}

export default App;

内容的提问来源于stack exchange,提问作者user20292170

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 17:45:28