Context API: Berbagi Data Tanpa Prop Drilling

Membagikan data global seperti tema dan pengguna ke banyak komponen.

Part 19 dari 23 ± 40 menit Gratis

Masalah: prop drilling

Jika data (misalnya tema gelap/terang atau pengguna yang login) dibutuhkan komponen yang dalam di pohon, kamu harus meneruskan props melewati banyak komponen perantara yang tidak memakainya. Itu melelahkan dan rawan salah.

Context

Context memungkinkan komponen induk menyediakan data yang bisa dibaca oleh semua keturunannya, tanpa props berantai.

Tiga langkah:

1. Buat context

import { createContext } from "react";

export const TemaContext = createContext("terang");   // nilai bawaan

2. Sediakan nilai dengan Provider

function TemaProvider({ children }) {
  const [tema, setTema] = useState("terang");
  const ganti = () => setTema((t) => (t === "terang" ? "gelap" : "terang"));

  return (
    <TemaContext.Provider value={{ tema, ganti }}>
      {children}
    </TemaContext.Provider>
  );
}

Bungkus bagian aplikasi yang membutuhkan:

<TemaProvider>
  <Halaman />
</TemaProvider>

3. Baca nilai dengan useContext

import { useContext } from "react";

function TombolTema() {
  const { tema, ganti } = useContext(TemaContext);
  return <button onClick={ganti}>Tema: {tema}</button>;
}

Komponen mana pun di dalam TemaProvider, sedalam apa pun, bisa memakai useContext(TemaContext).

Perilaku render

Ketika value pada Provider berubah, semua komponen yang membaca context itu dirender ulang. Karena itu:

  • Simpan hal yang jarang berubah di context (tema, bahasa, pengguna login).
  • Hindari menaruh state yang berubah cepat (posisi mouse, isi input) di context besar.
  • Pisahkan context menjadi beberapa yang kecil bila perlu.

Custom hook untuk context

Bungkus useContext agar pemakaian lebih rapi dan aman:

function useTema() {
  const ctx = useContext(TemaContext);
  if (!ctx) throw new Error("useTema harus dipakai di dalam TemaProvider");
  return ctx;
}

Context vs library state global

Context cocok untuk berbagi data yang sederhana. Untuk state kompleks dengan banyak pembaruan, kombinasikan dengan useReducer, atau pakai Redux Toolkit / Zustand.

Praktikkan langsung, gratis

Tulis dan jalankan kode langsung di browser, dapatkan penilaian otomatis. Daftar gratis kapan saja untuk menyimpan progres dan meraih sertifikat.

Coba latihan sekarang, tanpa daftar
Bagikan: WhatsApp Facebook LinkedIn X