Optimization: useMemo & useCallback 🚀
Secara default, React itu Paranoid. Setiap kali ada perubahan kecil di Parent, dia bakal nge-render ulang SEMUA anaknya, walaupun si anak gak berubah datanya.
Buat aplikasi kecil, ini gak masalah. Tapi buat aplikasi gede yang datanya ribuan, ini bikin Lemot.
Solusinya: Memoization (Nyontek hasil sebelumnya).
1. useMemo (Cache Hasil Hitungan) đź§®
Bayangin lo punya fungsi matematika yang berat banget (butuh 5 detik buat ngitung). Lo gak mau fungsi itu jalan tiap kali lo ngetik di input form kan?
useMemo gunanya buat: "Inget hasil hitungan ini. Jangan ngitung ulang KECUALI bahan bakunya berubah."
import { useState, useMemo } from "react";
export default function BeratBanget() {
const [angka, setAngka] = useState(0);
const [text, setText] = useState("");
// Fungsi berat (simulasi)
const hasilKuadrat = useMemo(() => {
console.log("Lagi mikir keras..."); // Cek console
return angka * angka * 1000;
}, [angka]); // <--- Dependency: Cuma hitung ulang kalau 'angka' berubah
return (
<div>
<h1>Hasil: {hasilKuadrat}</h1>
<button onClick={() => setAngka(angka + 1)}>Tambah Angka</button>
{/* Kalau lo ngetik di sini, 'hasilKuadrat' GAK BAKAL dihitung ulang */}
{/* Karena 'angka' gak berubah. React nyontek hasil lama. */}
<input value={text} onChange={(e) => setText(e.target.value)} />
</div>
);
}2. useCallback (Cache Fungsi) 🎣
Setiap kali komponen di-render ulang, semua function di dalemnya DIBUAT ULANG (alamat memorinya beda). Ini bikin anak-anak komponen ngira: "Eh, fungsi dari Bapak berubah nih, gue harus render ulang!"
useCallback gunanya buat: "Kunci fungsi ini biar gak dibuat ulang terus menerus."
import { useCallback } from "react";
// Fungsi ini gak bakal "re-created" setiap render
// Kecuali dependency-nya berubah
const handleClick = useCallback(() => {
console.log("Tombol diklik");
}, []); // [] artinya fungsi ini abadi, gak pernah berubahKapan Harus Pake? 🤔
Jangan Over-Optimization!
Jangan pake useMemo dan useCallback di SEMUA tempat. Memoization itu sendiri butuh memori.
Pake Cuma Kalau:
-
Aplikasinya terasa nge-lag/berat.
-
Ada perhitungan matematika yang kompleks.
-
Ada komponen anak yang sering re-render gak jelas (React.memo).