React Academy · Pelajaran

Konteks React untuk Keadaan Tema

Bina ThemeProvider yang mendedahkan tema semasa dan fungsi togol kepada seluruh pepohon komponen.

Pelajaran 3 daripada 413 langkah

Konteks React untuk Keadaan Tema ialah pelajaran React Academy percuma di CoddyKit. Ini ialah pelajaran 3 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran React Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus React Academy merangkumi sejumlah 4 pelajaran.

Mencipta ThemeContext

Mulakan dengan memanggil createContext() menggunakan nilai lalai yang sepadan dengan bentuk konteks anda: const ThemeContext = createContext({ theme: 'light', toggleTheme: () => {} }). Nilai lalai ini hanya digunakan apabila komponen membaca konteks tanpa Provider induk, yang membantu dalam ujian komponen secara berasingan.

Komponen ThemeProvider

Komponen ThemeProvider ialah pembungkus yang mengandungi semua logik tema. Komponen ini membaca keutamaan sistem semasa dipasang, mengurus keadaan theme, menyediakan fungsi toggleTheme, dan membungkus anak-anaknya dalam ThemeContext.Provider value={{ theme, toggleTheme }}. Letakkannya berhampiran bahagian atas pepohon komponen anda.

Menggunakan Konteks dengan useContext

Mana-mana komponen keturunan boleh mengakses tema dengan memanggil useContext(ThemeContext). Fungsi ini mengembalikan nilai konteks semasa, termasuk theme dan toggleTheme. Komponen itu dipaparkan semula secara automatik apabila tema berubah, jadi keadaannya sentiasa disegerakkan tanpa perlu menghantar prop secara berantai.

Menyegerakkan data-theme dengan DOM

Pemboleh ubah CSS bergantung pada atribut data-theme pada elemen akar. Dalam ThemeProvider, tambahkan useEffect yang dijalankan setiap kali theme berubah: document.documentElement.setAttribute('data-theme', theme). Ini menghubungkan keadaan React dengan lapisan CSS dengan lancar.

Menyimpan Pilihan Pengguna dalam localStorage

Untuk mengekalkan pilihan pengguna selepas halaman dimuat semula, tulis ke localStorage setiap kali tema berubah: localStorage.setItem('theme', theme). Anda boleh merangkumkan logik ini dalam cangkuk tersuai useLocalStorage yang mengembalikan pasangan seperti keadaan dan mengekalkan setiap kemas kini secara automatik.

Memulakan Tema daripada localStorage

Semasa memulakan keadaan tema, baca localStorage terlebih dahulu: localStorage.getItem('theme'). Jika tiada nilai tersimpan, gunakan keutamaan sistem sebagai sandaran melalui window.matchMedia('(prefers-color-scheme: dark)').matches. Pemulaan ini hanya dijalankan sekali apabila komponen dipasang.

Turutan Keutamaan Tema

Turutan keutamaan yang betul daripada paling tinggi kepada paling rendah ialah: keutamaan pengguna yang tersimpan dalam localStorage, kemudian keutamaan sistem OS, dan akhirnya nilai lalai yang ditetapkan dalam kod, biasanya tema cerah. Turutan ini memastikan pengguna sentiasa mempunyai kawalan terakhir, sambil tetap menghormati konfigurasi OS mereka jika mereka belum membuat pilihan secara jelas dalam aplikasi.

Cangkuk Kemudahan useTheme

Memanggil useContext(ThemeContext) secara terus dalam setiap komponen mendedahkan butiran pelaksanaan. Sebaliknya, eksportkan cangkuk useTheme: function useTheme() { return useContext(ThemeContext); }. Komponen kini mengimport useTheme dan memanggilnya tanpa perlu mengetahui konteks asas yang digunakan.

Menyediakan Fungsi Togol

Fungsi toggleTheme bertukar antara light dan dark: setTheme(prev => prev === 'light' ? 'dark' : 'light'). Dedahkan fungsi ini melalui konteks supaya mana-mana butang di mana-mana bahagian pepohon boleh mencetuskannya. Keadaan disimpan di satu tempat, manakala logik togol dikongsi di seluruh aplikasi.

Memoisasi Nilai Konteks

Objek nilai konteks dicipta semula pada setiap pemaparan ThemeProvider. Bungkusnya dalam useMemo untuk mengelakkan semua pengguna konteks dipaparkan semula tanpa perlu: const value = useMemo(() => ({ theme, toggleTheme }), [theme]). Ini ialah pengoptimuman prestasi yang biasa digunakan untuk penyedia konteks.

Menguji ThemeProvider

Dalam ujian, bungkus pemaparan dalam utiliti tersuai renderWithTheme yang menggunakan ThemeProvider sebagai pembungkus. Anda juga boleh mencipta konteks olok-olok yang ringkas untuk ujian berasingan: ThemeContext.Provider value={{ theme: 'dark', toggleTheme: jest.fn() }}. Dengan ini, anda boleh menguji komponen dalam keadaan tema tertentu.

Turutan Keutamaan Tema

Apakah turutan keutamaan yang betul untuk memulakan tema aplikasi, daripada keutamaan paling tinggi kepada paling rendah?

Ulang Kaji Pelajaran: Konteks React untuk Keadaan Tema

Cipta ThemeContext dan ThemeProvider yang mengurus keadaan tema, menyegerakkannya dengan localStorage, dan menetapkan data-theme pada dokumen. Gunakan cangkuk kemudahan useTheme untuk penggunaan yang kemas. Turutan keutamaannya ialah: pilihan tersimpan, kemudian keutamaan sistem, dan akhirnya nilai lalai.

Percuma untuk bermula

Pelajari React dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
88
Pelajaran
324

Soalan Lazim

Adakah pelajaran “Konteks React untuk Keadaan Tema” percuma?

Ya — teks penuh “Konteks React untuk Keadaan Tema” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus React Academy, tingkat taraf kepada CoddyKit PRO. Kursus React Academy merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “Konteks React untuk Keadaan Tema”?

Bina ThemeProvider yang mendedahkan tema semasa dan fungsi togol kepada seluruh pepohon komponen. Anda berlatih React Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan React Academy?

Tiada pengalaman terdahulu diperlukan. Pembelajaran React Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 3 daripada 4.

Berapa lamakah pelajaran “Konteks React untuk Keadaan Tema” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran React Academy ini?

Ya. Setiap pelajaran React Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. Mengesan Skema Warna Sistem
  2. Pemboleh Ubah CSS untuk Menukar Tema
  3. Konteks React untuk Keadaan Tema
  4. Mengekalkan Tema dan Menghalang Kelipan
← Kembali ke React Academy