1. Kenapa Harus Pakai useMemo & useCallback?
React punya mekanisme re-render yang bikin UI selalu up-to-date. Tapi, kalau nggak dikontrol, bisa boros dan bikin aplikasi lambat. Di sinilah useMemo dan useCallback masuk untuk menghemat sumber daya dengan mencegah perhitungan ulang yang nggak perlu.
2. useMemo: Simpan Hasil Perhitungan
Bayangkan kamu punya perhitungan berat di komponenmu, misalnya menghitung angka Fibonacci. Tanpa useMemo, setiap re-render bakal hitung ulang, padahal hasilnya sama!
Contoh Tanpa useMemo
import { useState } from "react";
function App() {
  const [count, setCount] = useState(0);
  function expensiveCalculation(num) {
    console.log("Menghitung...");
    return num * 2;
  }
  const result = expensiveCalculation(count);
  return (
    <div>
      <h1>Hasil: {result}</h1>
      <button onClick={() => setCount(count + 1)}>Tambah</button>
    </div>
  );
}
export default App;
Setiap kali tombol ditekan, expensiveCalculation dipanggil ulang, padahal hasilnya bisa diingat!
Pakai useMemo
import { useState, useMemo } from "react";
function App() {
  const [count, setCount] = useState(0);
  const result = useMemo(() => {
    console.log("Menghitung...");
    return count * 2;
  }, [count]);
  return (
    <div>
      <h1>Hasil: {result}</h1>
      <button onClick={() => setCount(count + 1)}>Tambah</button>
    </div>
  );
}
export default App;
Dengan useMemo, React hanya menghitung ulang jika count berubah. Hemat tenaga!
3. useCallback: Simpan Fungsi Supaya Nggak Berubah
Saat pakai event handler dalam komponen child, setiap re-render bakal bikin fungsi baru, yang bisa bikin komponen child re-render juga. Nah, useCallback bantu mencegah itu!
Contoh Tanpa useCallback
import { useState } from "react";
import Child from "./Child";
function App() {
  const [count, setCount] = useState(0);
  const handleClick = () => {
    console.log("Diklik!");
  };
  return (
    <div>
      <Child onClick={handleClick} />
      <button onClick={() => setCount(count + 1)}>Tambah</button>
    </div>
  );
}
export default App;
Setiap kali tombol ditekan, handleClick berubah dan bikin Child ikut re-render.
Pakai useCallback
import { useState, useCallback } from "react";
import Child from "./Child";
function App() {
  const [count, setCount] = useState(0);
  const handleClick = useCallback(() => {
    console.log("Diklik!");
  }, []);
  return (
    <div>
      <Child onClick={handleClick} />
      <button onClick={() => setCount(count + 1)}>Tambah</button>
    </div>
  );
}
export default App;
Dengan useCallback, fungsi handleClick nggak berubah setiap render, jadi Child nggak re-render tanpa alasan.
4. Kapan Harus Pakai useMemo & useCallback?
Gunakan kalau:
- Ada perhitungan berat yang nggak perlu dilakukan ulang (
useMemo) - Ada fungsi yang dikirim ke child component (
useCallback) 
Jangan pakai kalau:
- Kode tetap ringan tanpa mereka
 - Dipakai di tempat yang nggak butuh optimasi
 
5. Kesimpulan
useMemomenyimpan hasil perhitungan supaya nggak dihitung ulang.useCallbackmenyimpan fungsi supaya nggak berubah di setiap render.- Pakai hanya kalau performa aplikasi benar-benar butuh dioptimasi.
 
Dengan useMemo dan useCallback, aplikasi React-mu bakal lebih hemat tenaga dan nggak boros render! 
No comments:
Post a Comment