我已经完成了关于Next.js的基础课程,其中我通过以下方式使用了Image组件:

<Image
    src="/hero-desktop.png"
    width={1000}
    height={760}
    className="hidden md:block"
    alt="Screenshots of the dashboard project showing desktop version"
></Image>

hero-desktop.pngpublic目录中,app目录中有所有的路由.

这起到了天衣无缝的作用.

现在,在其他Next.js项目中,我想使用相同的(以便优化图像处理),所以我遵循了相同的步骤:

  1. 创建所需的图像author-image.jpg并将其放入public目录,与app目录一起创建.

  2. 添加以下代码:

<Image
  src="/author-image.jpg"
  width={200}
  height={200}
  alt="Michał Turczyn"
  loading="eager"
></Image>

在此设置之后,对于获取图像的请求,我只收到Bad Request个响应:

enter image description here

我还try 了其他解决方案:try 导入图像并将src属性设置为该导入的值:

import authorImage from '/author-image.jpg';

<Image
    src={authorImage}
    width={200}
    height={200}
    alt="Michał Turczyn"
    loading="eager"
></Image>

也试过了

import authorImage from 'author-image.jpg';

Both attempts resulted in error: enter image description here

另外,我设置了loading='eager'来覆盖来自Next.js的默认值loading='lazy'.它对有问题的行为没有任何影响.

如何正确加载图像?为什么会出现这个问题?

推荐答案

因此,我遵循了这篇教程Image Optimization,其中引用图像的方式有所不同,因此在我的示例中,我需要添加这样的import语句:

import authorImage from '../../public/author-image.jpg';

原来我需要为图像文件指定相对路径.

正如链接文章中所指定的,它还使Next.js能够提供widthheight的值,因此它们在Image组件中成为可选的.

然后,指定src={authorImage}就像预期的那样工作.

Reactjs相关问答推荐

过滤对象数组并通过迭代对象数组将属性放入新数组

关于同一位置的不同组件实例的react S规则被视为相同组件

XChaCha20-Poly1305的解密函数

GoLang有条件地为.js.gz提供服务(如果它存在),否则为.js

在数组对象内的数组上进行映射

React-React中是否完全支持基于类的组件?

useEffect不重新渲染

如何使用react-router-dom保护嵌套在受保护路由中的嵌套路由?

如何优化 React 应用程序的性能?

Redux 工具包不更新状态

画布:用鼠标绘制形状时重新绘制整个画布会导致卡顿

ReactJS 中的图像加载顺序

为什么这个 React 组件会导致无限渲染?

页面不显示

在准备回调中使用状态属性(Redux 工具包)

用 jest 测试包裹在 redux 和 router 中的组件

如何从其他组件访问 useQuery refetch 方法?

调用 Jest 和服务方法的问题

设置 Material UI 表格默认排序

在 redux 状态更改时更新react 按钮禁用状态