Kita akan menampilkan teks dan secara otomatis menyesuaikan tinggi box berdasarkan lebar teks sebelum browser merender ke layar.
Perbedaan utama useEffect vs useLayoutEffect:
- useEffect dijalankan setelah semua render selesai dan layar di-paint.
- useLayoutEffect dijalankan sebelum layar di-paint, cocok untuk pengukuran dan manipulasi DOM agar tidak terjadi flicker.
Kode:
jsxCopyEditimport React, { useRef, useState, useLayoutEffect } from 'react';
function LayoutEffectBox() {
const boxRef = useRef(null);
const [boxHeight, setBoxHeight] = useState(0);
useLayoutEffect(() => {
if (boxRef.current) {
const height = boxRef.current.getBoundingClientRect().height;
setBoxHeight(height);
}
}, []);
return (
<div>
<div ref={boxRef} style={{ fontSize: '24px', padding: '1rem', border: '1px solid black' }}>
Ini adalah teks yang akan diukur tinggi box-nya.
</div>
<p>Tinggi box: {boxHeight.toFixed(2)} px</p>
</div>
);
}
Penjelasan useLayoutEffect:
- Digunakan untuk pengukuran atau manipulasi layout DOM sebelum render terlihat.
- Sangat penting untuk menghindari layout shift atau visual flicker.