Bab 6: Custom Hooks

Membangun logika yang dapat digunakan kembali di banyak komponen.

Apa itu Custom Hook?

Custom Hook adalah sebuah **fungsi JavaScript** yang namanya diawali dengan kata use dan dapat memanggil Hook lain di dalamnya (seperti `useState` atau `useEffect`). Ini bukan fitur bawaan React, melainkan sebuah konvensi yang memungkinkan kita berbagi logika stateful.

Tujuan utamanya adalah untuk menghindari duplikasi kode. Jika Anda menemukan diri Anda menulis logika yang sama (misalnya, mengambil data, mengelola status toggle) di beberapa komponen, itu adalah kandidat yang sempurna untuk diekstrak menjadi Custom Hook.

Membuat Custom Hook Pertama: `useToggle`

Mari kita buat hook sederhana untuk mengelola nilai boolean (true/false) yang bisa di-toggle.

1. Ekstrak Logika ke Sebuah Fungsi

Buat fungsi yang diawali dengan `use`. Di dalamnya, gunakan `useState` seperti biasa dan kembalikan nilai serta fungsi pengubahnya.

import { useState } from 'react';

// Nama fungsi harus diawali dengan "use"
const useToggle = (initialValue = false) => {
    const [value, setValue] = useState(initialValue);

    // Fungsi untuk membalik nilai boolean
    const toggle = () => setValue(prevValue => !prevValue);

    // Kembalikan nilai dan fungsi toggle dalam sebuah array
    return [value, toggle];
};

2. Gunakan di Komponen Anda

Sekarang, Anda bisa menggunakan `useToggle` di komponen mana pun seolah-olah itu adalah hook bawaan React.

Contoh Kode:

function ToggleExample() {
  // Gunakan hook untuk dua state yang berbeda
  const [isToggled, toggle] = useToggle(false);
  const [isHappy, toggleMood] = useToggle(true);

  return (
    <>
      <p>Status: {isToggled ? "ON" : "OFF"}</p>
      <button onClick={toggle}>Toggle Status</button>

      <p>Mood: {isHappy ? "😊" : "😢"}</p>
      <button onClick={toggleMood}>Ubah Mood</button>
    </>
  );
}

Hasil Tampilan Interaktif:

Status: OFF

Mood: 😊 Senang