HTML 요소에 의해 트리거되는 로드 이벤트는 기본적으로 창 객체까지 버블링되지 않습니다. 따라서 img HTML 요소를 사용하여 이미지를 로드할 때 window 객체에 알려야 하는 경우 이벤트를 수동으로 전달해야 합니다.
예:
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'); });
콘솔 출력: 두 번째 로그 'Window Load Event'는 dispatchEvent를 호출하여 트리거됩니다
Image load event Window load event Window load event
이미지 URL을 가져오는 API 호출을 시뮬레이션하고 이를 배너 구성 요소에 전달하면 imgUrl이 변경될 때 다시 렌더링이 트리거되어 두 번째 렌더링 단계에서 올바른 완료 값을 캡처할 수 있습니다.
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> ); }
onLoad 이벤트 콜백에서 구성요소 상태 업데이트
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> ); }
계속됩니다...
위 내용은 React에서 이미지가 로드된 후 작업을 수행하는 방법: onLoad 이벤트 또는 전체 속성 사용의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!