Acara pemuatan yang dicetuskan oleh elemen HTML tidak menggelembung ke objek tetingkap secara lalai. Oleh itu, apabila imej dimuatkan menggunakan elemen HTML img, jika anda perlu memberitahu objek tetingkap, anda mesti menghantar acara itu secara manual kepadanya.
Contoh:
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'); });
Output konsol: log kedua 'Peristiwa Muatan Tetingkap' dicetuskan dengan memanggil dispatchEvent
Image load event Window load event Window load event
Mensimulasikan panggilan API untuk mengambil URL imej dan menghantarnya ke komponen Sepanduk mencetuskan pemaparan semula apabila imgUrl berubah, membenarkan nilai yang betul untuk dilengkapkan ditangkap pada peringkat pemaparan kedua.
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> ); }
Kemas kini keadaan komponen dalam panggilan balik acara 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> ); }
Bersambung...
Atas ialah kandungan terperinci Cara Melakukan Tindakan Selepas Imej Dimuatkan dalam React: Menggunakan Acara onLoad atau Harta yang lengkap. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!