如何在 nextjs 图像组件中显示占位符图像
How to show a placeholder image in nextjs image component
我正在尝试显示来自 API 调用的图像。我想显示一个占位符图像,以防没有图像或任何错误。为此,我写了这段代码,
const [errorImage, setErrorImage] = useState(null);
<Image
src={`${imageUrl}/${item.image}`}
alt="image"
layout="fill"
objectFit="contain"
onError={(e) => {
if (!errorImage) {
setErrorImage(true);
e.target.src = "/static/placeholder.jpg";
}
}}
但是没用。
在设置true
时改变errorImage
的状态会导致组件re-render,所以不需要直接设置e.target.src
。
选项 1
相反,您可以执行以下操作:
const [errorImage, setErrorImage] = useState(null);
const errorImageUrl = "/static/placeholder.jpg";
const url = errorImage ? errorImageUrl : `${imageUrl}/${item.image}`;
<Image
src={url}
alt="image"
layout="fill"
objectFit="contain"
onError={(e) => {
if (!errorImage) {
setErrorImage(true);
}
}}
选项 2
或者,您可以使用在 NextJS 11 中添加到 <Image>
组件的新 placeholder
道具。这将显示您提供的图像的模糊版本。
<Image
src={url}
alt="image"
layout="fill"
placeholder="/static/placeholder.jpg"
objectFit="contain"
我正在尝试显示来自 API 调用的图像。我想显示一个占位符图像,以防没有图像或任何错误。为此,我写了这段代码,
const [errorImage, setErrorImage] = useState(null);
<Image
src={`${imageUrl}/${item.image}`}
alt="image"
layout="fill"
objectFit="contain"
onError={(e) => {
if (!errorImage) {
setErrorImage(true);
e.target.src = "/static/placeholder.jpg";
}
}}
但是没用。
在设置true
时改变errorImage
的状态会导致组件re-render,所以不需要直接设置e.target.src
。
选项 1 相反,您可以执行以下操作:
const [errorImage, setErrorImage] = useState(null);
const errorImageUrl = "/static/placeholder.jpg";
const url = errorImage ? errorImageUrl : `${imageUrl}/${item.image}`;
<Image
src={url}
alt="image"
layout="fill"
objectFit="contain"
onError={(e) => {
if (!errorImage) {
setErrorImage(true);
}
}}
选项 2
或者,您可以使用在 NextJS 11 中添加到 <Image>
组件的新 placeholder
道具。这将显示您提供的图像的模糊版本。
<Image
src={url}
alt="image"
layout="fill"
placeholder="/static/placeholder.jpg"
objectFit="contain"