CodeBlanks Logo Icon CodeBlanks

Meydan okuma: Tema sağlayıcı

Context + useReducer ile koyu/açık tema sağlayıcı yazarsın.

Meydan okuma: Tema sağlayıcı

Bu meydan okumada bir tema context'i ve ThemeProvider bileşeni yazacaksın. theme state'i "light" veya "dark" tutar; toggleTheme onları değiştirir.

Context değer olarak { theme, toggleTheme } verir. Tüketen bileşenler useContext ile okur.

Bu yapı, karanlık/aydınlık tema geçişi için standart bir kalıptır.

Uygulama ThemeProvider yaz

ThemeContext oluştur (createContext). ThemeProvider bileşeni yaz: useState("light") ile theme tut, toggleTheme fonksiyonu tanımla (light ise dark, dark ise light). ThemeContext.Provider ile value={{ theme, toggleTheme }} ver ve children bas. export ile ThemeProvider ve ThemeContext'i dışa aktar.

Başlangıç kodu

App.jsx
import { createContext, useState } from "react";

// ThemeContext ve ThemeProvider'ı buraya yaz

Örnek çözüm

App.jsx
import { createContext, useState } from "react";

export const ThemeContext = createContext();

export function ThemeProvider({ children }) {
  const [theme, setTheme] = useState("light");
  const toggleTheme = () => setTheme(theme === "light" ? "dark" : "light");
  return (
    <ThemeContext.Provider value={{ theme, toggleTheme }}>
      {children}
    </ThemeContext.Provider>
  );
}

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Context'in değer olarak vermesi gereken?

  • Yalnızca tema rengi
  • Yalnızca toggleTheme
  • Tema ve toggleTheme fonksiyonu Doğru cevap
  • Tüm CSS stilleri

Açıklama: { theme, toggleTheme } hem durumu hem değiştirici verir.

2 toggleTheme

Soru
function toggleTheme() {
  setTheme(theme === "light" ? "dark" : ____);
}
Cevap
function toggleTheme() {
  setTheme(theme === "light" ? "dark" : "light");
}

Açıklama: Dark ise light, light ise dark yap.

Orta seviye bölümündeki tüm dersler