Menu

React Hooks: Semua Hook Dijelaskan dengan Contoh Langsung

Hook adalah fungsi yang namanya diawali use, yang memungkinkan komponen memakai fitur React seperti state, context, ref, atau effect. Lihat semua hook bawaan yang dikelompokkan berdasarkan kegunaannya, dua aturan yang diikuti setiap hook, dan cara menulis hook sendiri.

Halaman ini dilengkapi editor yang bisa dijalankan. Edit, jalankan, dan lihat output-nya seketika.

React hooks adalah fungsi yang namanya diawali use, yang memungkinkan function component memakai fitur React: useState untuk mengingat sebuah nilai, useEffect untuk menjalankan kode setelah render, useRef untuk memegang node DOM, useContext untuk membaca data bersama. Kamu memanggilnya di bagian atas komponen, dan React menyimpan nilainya di antara render.

Empat hook bekerja sama di sini. useState menyimpan teksnya, useRef menunjuk ke input agar tombol bisa memberinya fokus, useMemo menyimpan list hasil filter sampai query berubah, dan useEffect mencatat log setelah setiap render yang mengubah query. Ketik an dan perhatikan Konsol: satu baris per ketukan tombol, setelah list diperbarui.

Kenapa hook ada

Sebelum React 16.8, komponen yang butuh state atau kode lifecycle harus berupa class. Logika untuk satu fitur terpecah di componentDidMount, componentDidUpdate, dan componentWillUnmount, dan berbagi logika itu antarkomponen berarti memakai mixin (yang tidak pernah berjalan dengan sintaks class), higher order component, atau render prop, yang semuanya membungkus tree-mu dengan lapisan tambahan.

// The class way: one feature, three methods
class Clock extends React.Component {
    state = { now: new Date() };
    componentDidMount() {
        this.id = setInterval(() => this.setState({ now: new Date() }), 1000);
    }
    componentWillUnmount() {
        clearInterval(this.id);
    }
    render() {
        return <p>{this.state.now.toLocaleTimeString()}</p>;
    }
}

Dengan hook, fitur yang sama berada di satu tempat: effect memulai timer dan cleanup-nya menghentikannya.

Sembunyikan jam itu, dan Konsol mencetak timer stopped: React menjalankan cleanup saat Clock meninggalkan layar. Tampilkan lagi, dan timer baru dimulai. Class component masih berjalan di React 19, tetapi kode baru memakai hook.

Semua hook bawaan

React 19.2 mengelompokkan hook-nya berdasarkan apa yang diberikannya kepada komponen. Kamu akan memakai dua kelompok pertama setiap hari, dan sisanya saat ada masalah tertentu yang membutuhkannya.

HookApa yang diberikannyaHalaman
useStateNilai yang bertahan di antara render dan setter yang memicu render lagiuseState
useReducerState yang diperbarui oleh fungsi reducer dan action yang dikirim lewat dispatchuseReducer
useContextNilai yang disediakan induk, tanpa mengirim propsuseContext
useRefKotak yang bisa diubah dan bertahan di antara render, sering berisi node DOMuseRef
useImperativeHandleMenentukan apa yang dilihat induk lewat ref-muforwardRef
useEffectKode yang biasanya berjalan setelah browser menggambar: timer, subscription, fetchuseEffect
useLayoutEffectKode yang berjalan setelah DOM diperbarui tetapi sebelum browser menggambaruseLayoutEffect
useInsertionEffectBerjalan sebelum layout effect, untuk library CSS-in-JS
useEffectEventFungsi yang bisa dipanggil effect dan selalu melihat props serta state terbaruuseEffect
useMemoMenyimpan nilai hasil perhitungan di antara renderuseMemo
useCallbackMenyimpan fungsi di antara renderuseCallback
useTransitionMenandai update sebagai tidak mendesak dan memberi tahu selama masih pendinguseTransition
useDeferredValueSalinan sebuah nilai yang tertinggal selama render beratuseDeferredValue
useIdId unik yang sama di server dan di clientuseId
useSyncExternalStoreSubscribe ke store yang berada di luar ReactuseSyncExternalStore
useDebugValueLabel untuk custom hook di React DevTools
useMembaca promise atau context, dan boleh berada di dalam kondisiuse
useActionStateState yang diperbarui oleh form action, dengan flag pendinguseActionState
useOptimisticMenampilkan hasil yang diharapkan sebelum server menjawabuseOptimistic
useFormStatusKeadaan pending dari form induk (dari react-dom)

use, useActionState, useOptimistic, dan useFormStatus hadir bersama React 19, dan useEffectEvent menjadi stabil di 19.2. Semua hook lain di daftar ini juga berjalan di React 18.

State memicu render, ref tidak

Tidak setiap hook memicu render. useState dan useReducer memicunya: ubah nilainya, dan React menggambar komponen itu lagi. useRef memberimu objek yang field current-nya bisa kamu ubah dengan bebas, dan React tidak pernah merender ulang karenanya. Karena itu, ref adalah tempat yang tepat untuk id timer, nilai sebelumnya, atau hitungan yang tidak ditampilkan di layar.

useReducer menyimpan keranjang dan useState menyimpan catatan; keduanya memicu render saat berubah, dan effect mencatat satu baris per render. Effect juga mengubah commits.current, tetapi perubahan itu tidak pernah memicu render sendiri, jadi log-nya tidak berputar tanpa henti. Hitungannya diperbarui di effect, bukan di isi komponen, karena isi komponen tidak boleh mengubah apa pun selama merender.

Aturan hook

Setiap hook mengikuti dua aturan:

  1. Panggil hook di level teratas komponenmu, jangan pernah di dalam kondisi, loop, atau fungsi bersarang.
  2. Panggil hook hanya dari function component atau dari custom hook buatanmu sendiri.

React tidak mengenali hook berdasarkan namanya. React mengenalinya berdasarkan urutan pemanggilannya, dan mengharapkan urutan itu sama di setiap render. Hook di dalam if akan menggeser setiap hook setelahnya. Halaman aturan hook menunjukkan apa yang rusak dan cara memperbaikinya. use adalah satu-satunya pengecualian: ia boleh dipanggil di dalam kondisi.

Custom hook pertamamu

Saat dua komponen butuh logika yang sama yang punya state, pindahkan logika itu ke fungsi yang namanya diawali use. Fungsi itu boleh memanggil hook lain mana pun. Setiap komponen yang memanggilnya mendapat state sendiri.

Kedua counter menjalankan hook yang sama, tetapi mengklik yang satu tidak memengaruhi yang lain: custom hook berbagi logika, bukan state. Tambahkan fungsi decrement ke useCounter dan tombol yang memanggilnya, dan kedua counter langsung mendapatkannya. Pola lainnya (useToggle, useDebounce, useLocalStorage) ada di halaman custom hook.

Hook mana yang dipakai

  • Layar harus berubah saat sebuah nilai berubah: useState, atau useReducer saat banyak event memperbarui state yang sama.
  • Kamu perlu berinteraksi dengan sesuatu di luar React (timer, subscription, request): useEffect.
  • Kamu butuh node DOM atau nilai yang tidak ditampilkan di layar: useRef.
  • Banyak komponen jauh di dalam tree butuh nilai yang sama: useContext.
  • Render terasa lambat karena satu perhitungan atau karena child yang memakai memo ikut dirender ulang: useMemo dan useCallback. React Compiler bisa menambahkan memoization ini untukmu, tetapi menulisnya secara manual tetap berjalan dan masih umum.
  • Mengetik terasa lambat karena update di baliknya berat: useTransition atau useDeferredValue.

Pertanyaan yang sering diajukan

Apa itu hook di React?

Hook adalah fungsi yang namanya diawali use, yang memungkinkan function component memakai fitur React: useState untuk state, useEffect untuk side effect, useContext untuk context, useRef untuk nilai yang bertahan di antara render tanpa memicu render, dan lainnya.

Kenapa hook ditambahkan ke React?

Sebelum ada hook (React 16.8), state dan lifecycle method hanya ada di class component, dan berbagi logika yang punya state butuh mixin, higher order component, atau render prop. Hook menaruh logika itu di fungsi biasa yang bisa kamu panggil dari function component mana pun dan dibagikan sebagai custom hook.

Ada berapa hook di React?

React 19.2 menyediakan sekitar dua puluh hook bawaan di package react, ditambah useFormStatus di react-dom. Sebagian besar aplikasi memakai segelintir di antaranya setiap hari: useState, useEffect, useRef, useContext, useMemo, dan useCallback.

Bisakah saya memakai hook di class component?

Tidak. Hook hanya berjalan di dalam function component dan hook lain. Kamu tetap bisa merender class component di samping function component, dan sebuah class bisa merender function component yang memakai hook.

Apa itu custom hook?

Custom hook adalah fungsimu sendiri yang namanya diawali use dan memanggil hook lain. Custom hook memungkinkan beberapa komponen memakai ulang logika yang sama yang punya state, sementara setiap komponen yang memanggilnya tetap mendapat state terpisah.

Ilustrasi bahasa pemrograman di Coddy

Belajar coding dengan Coddy

Mulai