React Context untuk State Tema
Buat ThemeProvider yang menyediakan tema saat ini dan fungsi pengalih ke seluruh pohon komponen.
React Context untuk State Tema adalah pelajaran React Academy gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar React Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus React Academy mencakup 4 pelajaran total.
Membuat ThemeContext
Mulailah dengan memanggil createContext() menggunakan nilai bawaan yang sesuai dengan bentuk konteks Anda: const ThemeContext = createContext({ theme: 'light', toggleTheme: () => {} }). Nilai bawaan ini hanya digunakan ketika komponen membaca konteks tanpa penyedia induk, sehingga membantu pengujian komponen secara terisolasi.
Komponen ThemeProvider
Komponen ThemeProvider adalah pembungkus yang menampung semua logika tema. Komponen ini membaca preferensi sistem saat pertama kali dipasang, mengelola status theme, menyediakan fungsi toggleTheme, dan membungkus komponen anak dengan ThemeContext.Provider value={{ theme, toggleTheme }}. Letakkan komponen ini di dekat bagian atas pohon komponen Anda.
Menggunakan Konteks dengan useContext
Komponen turunan apa pun dapat mengakses tema dengan memanggil useContext(ThemeContext). Pemanggilan ini mengembalikan nilai konteks saat ini, termasuk theme dan toggleTheme. Komponen akan melakukan perenderan ulang secara otomatis ketika tema berubah, sehingga selalu tersinkron tanpa harus meneruskan properti melalui banyak tingkat.
Menyinkronkan data-theme ke DOM
Variabel CSS bergantung pada atribut data-theme pada elemen akar. Di dalam ThemeProvider, tambahkan useEffect yang berjalan setiap kali theme berubah: document.documentElement.setAttribute('data-theme', theme). Cara ini menjembatani status React dan lapisan CSS dengan lancar.
Menyimpan Pilihan Pengguna di localStorage
Untuk mempertahankan pilihan pengguna setelah halaman dimuat ulang, tulislah ke localStorage setiap kali tema berubah: localStorage.setItem('theme', theme). Anda dapat merangkum logika ini dalam pengait kustom useLocalStorage yang mengembalikan pasangan mirip status dan secara otomatis menyimpan setiap pembaruan.
Menginisialisasi Tema dari localStorage
Saat menginisialisasi status tema, bacalah localStorage terlebih dahulu: localStorage.getItem('theme'). Jika tidak ada nilai tersimpan, gunakan preferensi sistem sebagai cadangan melalui window.matchMedia('(prefers-color-scheme: dark)').matches. Inisialisasi ini hanya berjalan sekali saat komponen dipasang.
Urutan Prioritas Tema
Urutan prioritas yang benar dari yang tertinggi hingga terendah adalah: preferensi pengguna yang tersimpan di localStorage, kemudian preferensi sistem operasi, lalu nilai bawaan yang ditetapkan langsung (biasanya terang). Urutan ini memastikan pengguna selalu memiliki kendali terakhir, sekaligus tetap menghormati konfigurasi OS jika mereka belum memilih secara eksplisit di aplikasi.
Pengait Praktis useTheme
Memanggil useContext(ThemeContext) secara langsung di setiap komponen akan mengekspos detail implementasi. Sebagai gantinya, ekspor pengait useTheme: function useTheme() { return useContext(ThemeContext); }. Kini komponen cukup mengimpor useTheme dan memanggilnya tanpa perlu mengetahui konteks yang mendasarinya.
Menyediakan Fungsi Pengalih
Fungsi toggleTheme beralih antara light dan dark: setTheme(prev => prev === 'light' ? 'dark' : 'light'). Sediakan fungsi ini melalui konteks agar tombol mana pun di seluruh pohon komponen dapat memicunya. Status berada di satu tempat, sedangkan logika pengalihan digunakan di mana-mana.
Memorisasi Nilai Konteks
Objek nilai konteks dibuat ulang pada setiap perenderan ThemeProvider. Bungkus objek tersebut dengan useMemo untuk mencegah perenderan ulang yang tidak perlu pada semua konsumen konteks: const value = useMemo(() => ({ theme, toggleTheme }), [theme]). Ini adalah pengoptimalan kinerja yang umum untuk penyedia konteks.
Menguji ThemeProvider
Dalam pengujian, bungkus perenderan dengan utilitas kustom renderWithTheme yang menggunakan ThemeProvider sebagai pembungkus. Anda juga dapat membuat konteks tiruan ringan untuk pengujian terisolasi: ThemeContext.Provider value={{ theme: 'dark', toggleTheme: jest.fn() }}. Dengan begitu, Anda dapat menguji komponen dalam status tema tertentu.
Urutan Prioritas Tema
Berapakah urutan prioritas yang benar untuk menginisialisasi tema aplikasi, dari prioritas tertinggi hingga terendah?
Rangkuman Pelajaran: React Context untuk Status Tema
Buat ThemeContext dan ThemeProvider yang mengelola status tema, menyinkronkannya ke localStorage, dan menetapkan data-theme pada dokumen. Gunakan pengait praktis useTheme agar konteks mudah digunakan. Urutan prioritasnya adalah: preferensi tersimpan, kemudian preferensi sistem, lalu nilai bawaan.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “React Context untuk State Tema” gratis?
Ya — teks lengkap “React Context untuk State Tema” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus React Academy, upgrade ke CoddyKit PRO. Kursus React Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “React Context untuk State Tema”?
Buat ThemeProvider yang menyediakan tema saat ini dan fungsi pengalih ke seluruh pohon komponen. Kamu berlatih React Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai React Academy?
Tidak diperlukan pengalaman sebelumnya. React Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.
Berapa lama pelajaran “React Context untuk State Tema” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran React Academy ini?
Ya. Setiap pelajaran React Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Mendeteksi Skema Warna Sistem
- Variabel CSS untuk Pergantian Tema
- React Context untuk State Tema
- Menyimpan Tema dan Mencegah Kilatan