Menyimpan Tema dan Mencegah Kilatan
Simpan preferensi tema ke localStorage dan sisipkan skrip pemblokir untuk mengatur tema sebelum React dimuat.
Menyimpan Tema dan Mencegah Kilatan adalah pelajaran React Academy gratis di CoddyKit. Ini adalah pelajaran 4 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.
Masalah Kilatan Tema yang Salah
Saat halaman dimuat, React harus mengunduh, mengurai, dan menjalankan JavaScript sebelum dapat membaca localStorage dan menerapkan tema yang benar. Selama jeda ini, peramban menampilkan gaya bawaan. Jika pengguna memilih mode gelap tetapi nilai bawaan Anda adalah terang, mereka akan melihat kilatan putih singkat sebelum tema diperbaiki.
Solusi Skrip Pemblokir
Solusinya adalah skrip sebaris di dalam document head yang berjalan secara sinkron sebelum kode lain. Skrip ini segera membaca localStorage dan menetapkan data-theme pada document.documentElement. Karena merupakan skrip pemblokir, peramban menerapkan atribut tersebut sebelum menampilkan konten apa pun.
Mengapa Pemblokiran Diperlukan
Skrip asinkron atau yang ditunda berjalan setelah HTML diurai dan mungkin setelah tampilan pertama. Hal itu menggagalkan seluruh tujuan teknik ini. Skrip sebaris pemblokir tidak boleh memiliki atribut async atau defer, dan tidak boleh dimuat dari berkas eksternal. Skrip tersebut harus sangat kecil untuk meminimalkan biaya kinerja.
Konten Skrip Sebaris
Skrip pemblokir ini bersifat minimal: baca localStorage.getItem('theme'), periksa window.matchMedia('(prefers-color-scheme: dark)').matches sebagai cadangan, lalu panggil document.documentElement.setAttribute('data-theme', theme). Bungkus dengan penanganan kesalahan jika localStorage tidak tersedia saat penelusuran privat.
Implementasi Next.js
Di Next.js, gunakan komponen Script dari next/script dengan strategy="beforeInteractive" di dalam _document.js. Strategi beforeInteractive menyisipkan skrip ke dalam HTML halaman sebelum JavaScript halaman apa pun berjalan, sehingga menghasilkan perilaku pemblokiran yang sama dalam alur pembangunan Next.js.
Implementasi Vite dan CRA
Dalam proyek Vite atau Create React App, ubah index.html secara langsung dan letakkan tag skrip sebaris di dalam head sebelum skrip lainnya. Karena index.html merupakan titik masuk peramban, skrip berjalan sebelum React dimulai. Buat skrip tetap ringkas agar ukurannya di bawah 100 byte.
Solusi SSR melalui Kuki atau Header
Dalam aplikasi yang dirender di server, server dapat membaca tema dari kuki yang dikirim bersama permintaan. Server kemudian menetapkan data-theme di dalam HTML yang dirender sebelum mengirimkannya ke peramban. Cara ini sepenuhnya menghindari kilatan di sisi klien karena tema yang benar sudah ada pada byte pertama HTML.
Alur Lengkap Tanpa Kilatan
Alur lengkapnya adalah: peramban mengunduh HTML, pengurai menemukan skrip sebaris pemblokir, skrip membaca localStorage dan menetapkan data-theme, penguraian berlanjut, halaman ditampilkan dengan tema yang benar, lalu React melakukan hidrasi dan mengambil tema yang sama dari localStorage. Pengguna melihat satu tema yang konsisten sejak awal.
Menguji Pencegahan Kilatan
Untuk memverifikasi bahwa perbaikan ini berhasil, buka Chrome DevTools, buka tab Jaringan, lalu batasi kecepatan ke 3G Lambat. Muat ulang halaman. Jika Anda melihat perubahan tema selama pemuatan, kilatan tersebut belum teratasi. Dengan skrip pemblokir, tampilan awal seharusnya sudah menunjukkan tema yang benar bahkan pada koneksi lambat.
Risiko Ketidakcocokan Hidrasi
Jika status awal React ditetapkan ke terang tetapi skrip pemblokir menetapkan tema gelap sebelum hidrasi, React mungkin memperingatkan adanya ketidakcocokan hidrasi. Hindari hal ini dengan menginisialisasi status tema React sambil membaca localStorage selama perenderan awal, sehingga HTML yang dirender React cocok dengan status DOM yang ditetapkan oleh skrip pemblokir.
Kilatan di Storybook dan Lingkungan Pengujian
Storybook dan lingkungan pengujian tidak memuat index.html, sehingga skrip pemblokir tidak pernah berjalan. Sediakan dekorator atau penyiapan pengujian yang menerapkan atribut data-theme bawaan di lingkungan tersebut. Cara ini mencegah ketidakkonsistenan visual yang membingungkan saat mengembangkan komponen secara terisolasi.
Teknik Mencegah Kilatan
Jenis skrip apa yang harus digunakan di dalam document head untuk mencegah kilatan tema yang salah?
Rangkuman Pelajaran: Mempertahankan Tema dan Mencegah Kilatan
Cegah kilatan tema yang salah dengan menyisipkan skrip sebaris pemblokir berukuran kecil di dalam document head yang membaca localStorage dan menetapkan data-theme sebelum tampilan apa pun. Di Next.js, gunakan strategy="beforeInteractive"; di Vite atau CRA, tambahkan skrip langsung ke index.html. Aplikasi SSR dapat membaca kuki untuk menetapkan tema di sisi server.
Belajar React dengan tutor AI — gratis
Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.
- Kursus
- 88
- Pelajaran
- 324
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Menyimpan Tema dan Mencegah Kilatan” gratis?
Ya — teks lengkap “Menyimpan Tema dan Mencegah Kilatan” 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 “Menyimpan Tema dan Mencegah Kilatan”?
Simpan preferensi tema ke localStorage dan sisipkan skrip pemblokir untuk mengatur tema sebelum React dimuat. 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 4 dari 4.
Berapa lama pelajaran “Menyimpan Tema dan Mencegah Kilatan” 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