React で画像が読み込まれた後にアクションを実行する方法: onLoad イベントまたは完全なプロパティを使用する

Mary-Kate Olsen
リリース: 2024-11-15 10:03:02
オリジナル
484 人が閲覧しました

How to Perform Actions After an Image Loads in React: Using the onLoad Event or the complete Property

The load event triggered by an HTML element does not bubble up to the window object by default. Therefore, when an image is loaded using an img HTML element, if you need to notify the window object, you must manually dispatch the event to it.

An example:

HTML

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
  </head>
  <body>
    <img>



<p>JS<br>
</p>

<pre class="brush:php;toolbar:false">document.getElementById('image').addEventListener('load', function() {
  console.log('Image load event');
  window.dispatchEvent(new Event('load'));  // Manually dispatch load event to window
});

window.addEventListener('load', function() {
  console.log('Window load event');
});
ログイン後にコピー

Console output: the second log 'Window Load Event' is triggered by calling dispatchEvent

Image load event
Window load event
Window load event
ログイン後にコピー

Examples of Updating Text Based on Image Loading Status in React

Example 1: Using HTML 'complete' Property

Simulating an API call to fetch an image URL and passing it to the Banner component triggers a re-render when imgUrl changes, allowing the correct value of completed to be captured at the second render stage.

import { useRef , useState , useEffect } from "react";

export default function App() {
    const [imgUrl, setImgUrl] = useState("");
    useEffect(() => {
        // simulate calling API to get image url
        const loadImage = () => {
            setTimeout(() => {
                setImgUrl("https://placehold.co/200x100")
          }, 1500);
        }
      loadImage();
    }, []);
    return <Banner imgUrl={imgUrl} />
}

function Banner({ imgUrl }) {
    const ref = useRef(null);
    // this works when the imgUrl changes, triggering a re-render. Otherwise, the value of completed will always be false
   const completed = Boolean(ref.current?.complete);
    return (
        <div>
            <img ref={ref} src={imgUrl}
                onLoad={() => console.log("loaded")}
                onError={() => console.log("error")}/>
            <p>{completed ? "Image loaded" : "Image is not loaded"}</p>
        </div>
    );
}
ログイン後にコピー

Example 2: Using onLoad Event

Update the component state in the onLoad event callback

function StaticBanner() {
    const [loaded, setLloaded] = useState(false);
    return (
        <div>
            <img src="https://placehold.co/100x100"
                onLoad={() => {
                    console.log("StaticBanner img loaded");
                    setLloaded(true);
                }}
                onError={() => console.log("StaticBanner img error")}/>
            <p>{loaded ? "Image loaded" : "Image is not loaded"}</p>
        </div>
    );
}
ログイン後にコピー

What if a Banner lives in the DOM and does not unmount, but the img url that is passed into the component as a prop that changes constantly?

To be continued...

以上がReact で画像が読み込まれた後にアクションを実行する方法: onLoad イベントまたは完全なプロパティを使用するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート