代码之家  ›  专栏  ›  技术社区  ›  softandwet

反应img onError未点火

  •  0
  • softandwet  · 技术社区  · 2 年前

    我正在尝试使用第三方API获取分辨率更高的YouTube缩略图,有时代码404会失败。如果无法获取图像,我想用使用自己的API检索的默认YouTube缩略图替换src(我的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>
        )
    }
    
    1 回复  |  直到 2 年前
        1
  •  1
  •   omid    2 年前

    这与反应无关。尝试在浏览器中使用随机字符串访问该url videoId . 它仍将显示一幅图像,在本例中是默认的youtube缩略图。因此,即使从技术上讲它是404,并且您的浏览器会将其报告为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()" />