source code blog ini bisa ditemukan di link ini available on GitHub.

Blog.

Tutorial Singkat Penggunaan React Hooks.

Cover Image for Tutorial Singkat Penggunaan React Hooks.
mukharomdev
mukharomdev

Berikut daftar hook React.js beserta penjelasan dan contoh penggunaannya:


1. useState

Kegunaan: Mengelola state dalam komponen fungsi.
Contoh:

const [count, setCount] = useState(0); // Inisialisasi state dengan nilai 0

return (
  <button onClick={() => setCount(count + 1)}>
    Klik saya: {count}
  </button>
);

2. useEffect

Kegunaan: Menangani efek samping (side effects) seperti API calls, subscriptions, atau manipulasi DOM.
Contoh:

useEffect(() => {
  console.log("Komponen dimount atau count berubah");
  return () => {
    console.log("Cleanup sebelum efek berikutnya");
  };
}, [count]); // Efek dijalankan ketika <code>count</code> berubah

3. useContext

Kegunaan: Mengakses nilai dari React Context.
Contoh:

const ThemeContext = React.createContext('light');

function Button() {
  const theme = useContext(ThemeContext); // Ambil nilai tema
  return <button className={theme}>Tombol</button>;
}

4. useReducer

Kegunaan: Mengelola state kompleks dengan pola Redux.
Contoh:

const initialState = { count: 0 };

function reducer(state, action) {
  switch (action.type) {
    case 'increment':
      return { count: state.count + 1 };
    default:
      return state;
  }
}

const [state, dispatch] = useReducer(reducer, initialState);
<button onClick={() => dispatch({ type: 'increment' })}>
  Hitung: {state.count}
</button>

5. useCallback

Kegunaan: Memoisasi fungsi untuk menghindari re-render tidak perlu.
Contoh:

const handleClick = useCallback(() => {
  console.log("Tombol diklik");
}, []); // Fungsi tidak dibuat ulang kecuali dependency berubah

6. useMemo

Kegunaan: Memoisasi nilai hasil komputasi mahal.
Contoh:

const expensiveValue = useMemo(() => {
  return a * b; // Hanya dihitung ulang jika <code>a</code> atau <code>b</code> berubah
}, [a, b]);

7. useRef

Kegunaan: Menyimpan referensi DOM atau nilai yang persist antar-render.
Contoh:

const inputRef = useRef(null);

<input ref={inputRef} />
<button onClick={() => inputRef.current.focus()}>
  Fokus Input
</button>

8. useImperativeHandle

Kegunaan: Menyesuaikan nilai instance yang diekspos ke komponen parent via ref.
Contoh:

const FancyInput = forwardRef((props, ref) => {
  const inputRef = useRef();
  useImperativeHandle(ref, () => ({
    focus: () => inputRef.current.focus()
  }));
  return <input ref={inputRef} />;
});

9. useLayoutEffect

Kegunaan: Mirip useEffect, tetapi dijalankan secara sinkron setelah DOM dimutasi.
Contoh:

useLayoutEffect(() => {
  // Ukur dimensi DOM di sini
  const width = element.current.offsetWidth;
}, [deps]);

10. useDebugValue

Kegunaan: Menampilkan label kustom di React DevTools untuk custom hook.
Contoh:

function useCustomHook() {
  const status = "Online";
  useDebugValue(status); // Tampilkan "Online" di DevTools
  return status;
}

11. useDeferredValue (React 18+)

Kegunaan: Menunda pembaruan UI untuk nilai tertentu (optimisasi performa).
Contoh:

const deferredValue = useDeferredValue(value); // Tunda pembaruan <code>value</code>
return <List items={deferredValue} />;

12. useTransition (React 18+)

Kegunaan: Menandai pembaruan state sebagai transisi (non-blocking).
Contoh:

const [isPending, startTransition] = useTransition();

startTransition(() => {
  setState(newState); // Pembaruan dianggap sebagai transisi
});

13. useId (React 18+)

Kegunaan: Membuat ID unik yang stabil di server dan client.
Contoh:

const id = useId(); // Contoh output: ":r1:"
return <label htmlFor={id}>Label</label>;

14. useSyncExternalStore (React 18+)

Kegunaan: Subscribe ke external store (e.g., state management eksternal).
Contoh:

const state = useSyncExternalStore(
  store.subscribe,
  store.getState
);

Catatan:

  • Hooks dengan use hanya bisa dipanggil di komponen fungsi atau custom hook.
  • Dependency Array pada useEffect, useCallback, dan useMemo menentukan kapan efek/fungsi/nilai diperbarui.
  • Hooks React 18+ memerlukan versi React 18 atau lebih baru.