Aplikasi penghitung (counter) dengan komponen anak yang menerima fungsi dari parent. Kita optimasi fungsi agar tidak dibuat ulang setiap render menggunakan useCallback.
Struktur:
- Parent: menyimpan state count dan fungsi increment.
- Child: tombol yang memanggil increment.
Kode:
jsxCopyEditimport React, { useState, useCallback } from 'react';
const IncrementButton = React.memo(({ onIncrement }) => {
console.log('Child component rendered');
return <button onClick={onIncrement}>+1</button>;
});
function CounterApp() {
const [count, setCount] = useState(0);
const increment = useCallback(() => {
setCount((prev) => prev + 1);
}, []); // fungsi tidak akan berubah antar render
return (
<div>
<h1>Count: {count}</h1>
<IncrementButton onIncrement={increment} />
</div>
);
}
Penjelasan useCallback:
- Fungsi increment tidak dibuat ulang di setiap render karena dibungkus useCallback.
- Tanpa useCallback, komponen IncrementButton akan selalu re-render walau tidak perlu.
- Cocok dipakai saat passing fungsi ke komponen anak yang di-memoize (pakai React.memo).