反应 img onError 没有触发

React img onError not firing

我正在尝试使用第三方 API 获取更高分辨率的 YouTube 缩略图,有时会失败并显示代码 404。如果我无法获取图像,我想将 src 替换为使用自己的 API 检索的默认 YouTube 缩略图(我将 url 存储在 json 中)。当我尝试使用 img onError 事件实现它时,似乎在获取失败时没有触发任何东西。有人知道发生了什么事吗?谢谢!

const TestView = () => {

    const videoId = "tuZty35Fk7M"

    return (
        <div>
            <img src={`https://img.youtube.com/vi/${videoId}/maxresdefault.jpg`} onError={() => {console.log("errored")}}></img>
        </div>
    )
}

更新:
这最终效果很好

const TestView = () => {

    const videoId = "tuZty35Fk7M"
    const imgRef = useRef(null)
    const [thumbnailSrc, setThumbnailSrc] = useState(`https://img.youtube.com/vi/${videoId}/maxresdefault.jpg`)
    const defaultThumbnailSrc = `https://i.ytimg.com/vi/${videoId}/hqdefault.jpg`

    const handleImgValidity = () => {
        if (imgRef.current.naturalHeight == 90) {
            setThumbnailSrc(defaultThumbnailSrc)
        }
    }

    return (
        <div>
            <img ref={imgRef} src={thumbnailSrc} onLoad={handleImgValidity}></img>
        </div>
    )
}

这与 React 无关。尝试在浏览器中使用 videoId 的随机字符串访问 url。它仍会显示图像 - 在本例中为默认的 youtube 缩略图。因此,即使它在技术上是 404,并且您的浏览器会这样报告它,图像仍然有一些东西要显示,所以它不会触发 onError 函数。

如果您将代码中的 url 替换为肯定是 404 的内容,则您的代码可以正常工作。 运行 下面的代码片段,我将 youtube 换成 google,您会看到错误消息。

function onError() {
  console.log('errored')
}
<img src="https://img.google.com/vi/some-random-id/maxresdefault.jpg" onError="onError()" />