Tema Durumu için React Context
Geçerli temayı ve bir değiştirme işlevini tüm bileşen ağacına sunan bir ThemeProvider oluşturun
Tema Durumu için React Context, CoddyKit'te ücretsiz bir React Academy dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, React Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. React Academy kursu toplamda 4 dersten oluşur.
ThemeContext Oluşturma
Bağlamınızın yapısıyla eşleşen bir varsayılan değerle createContext() çağırarak başlayın: const ThemeContext = createContext({ theme: 'light', toggleTheme: () => {} }). Varsayılan değer yalnızca bir bileşen, üstünde bir sağlayıcı olmadan bağlamı okuduğunda kullanılır; bu da yalıtılmış bileşenlerin sınanmasına yardımcı olur.
ThemeProvider Bileşeni
ThemeProvider bileşeni, tüm tema mantığını barındıran bir sarmalayıcıdır. Bağlanma sırasında sistem tercihini okur, theme durumunu yönetir, bir toggleTheme işlevi sağlar ve alt bileşenleri ThemeContext.Provider value={{ theme, toggleTheme }} içine sarar. Bu bileşeni bileşen ağacınızın üst kısımlarına yerleştirin.
useContext ile Bağlamı Kullanma
Her alt bileşen, useContext(ThemeContext) çağırarak temaya erişebilir. Bu çağrı, theme ve toggleTheme dahil olmak üzere geçerli bağlam değerini döndürür. Tema değiştiğinde bileşen otomatik olarak yeniden oluşturulur; böylece özellikleri katmanlar boyunca aktarmaya gerek kalmadan her zaman eşzamanlı kalır.
data-theme Özniteliğini DOM ile Eşitleme
CSS değişkenleri, kök öğedeki bir data-theme özniteliğine bağlıdır. ThemeProvider içinde, theme her değiştiğinde çalışan bir useEffect ekleyin: document.documentElement.setAttribute('data-theme', theme). Bu işlem React durumuyla CSS katmanını sorunsuz biçimde birbirine bağlar.
Kullanıcı Geçersiz Kılmasını localStorage'da Saklama
Kullanıcının seçimini sayfa yeniden yüklendikten sonra da korumak için tema her değiştiğinde localStorage'a yazın: localStorage.setItem('theme', theme). Bu mantığı, durum benzeri bir ikili döndüren ve her güncellemeyi otomatik olarak saklayan özel bir useLocalStorage kancasında kapsülleyebilirsiniz.
Temayı localStorage'dan Başlatma
Tema durumunu başlatırken önce localStorage'dan okuyun: localStorage.getItem('theme'). Saklanan bir değer yoksa window.matchMedia('(prefers-color-scheme: dark)').matches aracılığıyla sistem tercihine başvurun. Bu başlatma işlemi bağlanma sırasında yalnızca bir kez çalışır.
Tema Öncelik Sırası
Yüksekten düşüğe doğru doğru öncelik sırası şöyledir: localStorage'daki saklanan kullanıcı tercihi, ardından sistemin OS tercihi ve son olarak sabit kodlanmış bir varsayılan değer (genellikle açık tema). Bu sıra, kullanıcıya her zaman son söz hakkını verirken uygulamada açıkça seçim yapmamışsa OS yapılandırmasına da saygı gösterilmesini sağlar.
useTheme Kolaylık Kancası
Her bileşende doğrudan useContext(ThemeContext) çağırmak uygulama ayrıntılarını açığa çıkarır. Bunun yerine bir useTheme kancası dışa aktarın: function useTheme() { return useContext(ThemeContext); }. Bileşenler artık temelindeki bağlamı bilmeden useTheme kancasını içe aktarabilir ve çağırabilir.
Geçiş İşlevi Sağlama
toggleTheme işlevi light ve dark arasında geçiş yapar: setTheme(prev => prev === 'light' ? 'dark' : 'light'). Ağaçtaki herhangi bir düğmenin bu işlevi tetikleyebilmesi için işlevi bağlam üzerinden dışa açın. Durum tek bir yerde tutulur; geçiş mantığı her yerde paylaşılır.
Bağlam Değerini Önbelleğe Alma
Bağlam değerini içeren nesne, ThemeProvider her yeniden oluşturulduğunda yeniden oluşturulur. Tüm bağlam tüketicilerinin gereksiz yeniden oluşturulmasını önlemek için nesneyi useMemo ile sarın: const value = useMemo(() => ({ theme, toggleTheme }), [theme]). Bu, bağlam sağlayıcıları için yaygın bir performans iyileştirmesidir.
ThemeProvider'ı Sınama
Sınamalarda, oluşturma işlemlerini sarmalayıcı olarak ThemeProvider kullanan özel bir renderWithTheme yardımcı programıyla sarın. Yalıtılmış sınamalar için basit bir sahte bağlam da oluşturabilirsiniz: ThemeContext.Provider value={{ theme: 'dark', toggleTheme: jest.fn() }}. Böylece bileşenleri belirli bir tema durumunda sınayabilirsiniz.
Tema Öncelik Sırası
Uygulama temasını başlatmak için yüksekten düşük önceliğe doğru doğru öncelik sırası nedir?
Ders Özeti: Tema Durumu için React Bağlamı
Tema durumunu yöneten, localStorage ile eşzamanlanan ve belgede data-theme ayarlayan bir ThemeContext ile ThemeProvider oluşturun. Temiz bir kullanım için useTheme kolaylık kancasını kullanın. Öncelik sırası: saklanan tercih, ardından sistem tercihi ve son olarak varsayılan değer.
Sıkça Sorulan Sorular
“Tema Durumu için React Context” dersi ücretsiz mi?
Evet — “Tema Durumu için React Context” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve React Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. React Academy kursu toplamda 4 dersten oluşur.
“Tema Durumu için React Context” dersinde ne öğreneceğim?
Geçerli temayı ve bir değiştirme işlevini tüm bileşen ağacına sunan bir ThemeProvider oluşturun React Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
React Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te React Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.
“Tema Durumu için React Context” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu React Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her React Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Sistem Renk Şemasını Algılama
- Tema Değiştirme için CSS Değişkenleri
- Tema Durumu için React Context
- Temayı Kalıcı Kılma ve Parlamayı Önleme