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

Next.js遍历静态图片数组时next/image的blur占位符报错

解决Next.js Image组件placeholder="blur"报错问题

问题分析

你遇到的报错提示Image with src "" has "placeholder='blur'" property but is missing the "blurDataURL" property,核心原因是某个Image组件的src被解析为空字符串,尽管你已经静态导入了图片,但可能存在以下几个潜在问题:

解决方案

1. 验证静态导入的图片对象有效性

先确认静态导入的图片是否正确加载,在certificates数组定义后添加日志检查:

console.log(scrumCourse);
// 正常输出应包含 src、width、height、blurDataURL 等属性

如果输出为undefined,说明图片路径错误(比如@/assets/images/scrumCert.webp拼写或目录结构不对),修正路径即可。

2. 确保数组存储完整的静态导入对象

你当前avatar: scrumCourse的写法是正确的,但如果误写成avatar: scrumCourse.src,会丢失Next.js自动生成的blurDataURL属性,直接导致报错。确认数组中存储的是完整的导入对象,而非仅src字段。

3. 排查数组中的空图片项

如果certificates数组里存在未设置avatar的元素,遍历渲染时会出现src为空的Image组件。确保数组中每个元素的avatar都指向有效的静态导入图片。

4. 移除冗余的外层循环

你的代码用[...new Array(10)].fill(0).map重复渲染了10次证书列表,这不仅冗余,还可能放大潜在问题。如果不需要重复渲染,直接保留内层遍历即可:

{certificates.map(certificate => (
  <Card key={certificate.name} className="max-w-[400px] md:max-w-md p-2 md:p-4 items-center transition duration-300 hover:rotate-1">
    <Link href={certificate.link} target="_blank" >
      <div className="relative w-[416px] h-[321.45px] object-cover">
        <Image
          src={certificate.avatar}
          alt={certificate.name}
          placeholder="blur"
          fill
          className="max-h-full rounded-3xl" />
      </div>
    </Link>
  </Card>
))}

5. 确认版本与格式兼容性

确保使用的Next.js版本在12及以上(该版本开始支持静态导入图片自动生成blurDataURL),且图片格式为jpeg、png、webp、avif(你使用的webp符合要求),排除动图的情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 08:55:06