React اور Recoil کے ساتھ UI تھیم سوئچنگ (ڈارک موڈ) کو کیسے نافذ کیا جائے۔

React اور Recoil کے ساتھ UI تھیم سوئچنگ (ڈارک موڈ) کو کیسے نافذ کیا جائے۔

ماخذ نوڈ: 1781487

نوٹ: یہ ٹیوٹوریل CSS-in-JS اسٹائلنگ اپروچ استعمال کرنے والے ڈویلپرز کے لیے متعلقہ ہے، جیسے Emotion.js، Material UI، وغیرہ۔

مرحلہ 1: فی الحال منتخب کردہ تھیم کے نام کے لیے Recoil ایٹم کا استعمال کریں۔

import { PaletteMode } from "@mui/material";
import { atom } from "recoil"; export const ThemeName = atom<PaletteMode>({ key: "ThemeName", effects: []
});

مرحلہ 2: فی الحال منتخب کردہ تھیم آبجیکٹ کے لیے Recoil سلیکٹر استعمال کریں۔

import { createTheme } from "@mui/material";
import { selector } from "recoil"; export const Theme = selector({ key: "Theme", dangerouslyAllowMutability: true, get(ctx) { const name = ctx.get(ThemeName); return createTheme(); },
});

مرحلہ 3: شامل کریں useTheme(), useToggleTheme() ہکس پر رد عمل ظاہر کریں۔

import { useRecoilValue, useRecoilCallback } from "recoil"; export function useTheme() { return useRecoilValue(Theme);
} export function useToggleTheme() { return useRecoilCallback( (ctx) => () => { ctx.set(ThemeName, (prev) => (prev === "dark" ? "light" : "dark")); }, [] );
}

مرحلہ 4: فی الحال منتخب کردہ تھیم کا نام محفوظ/بحال کریں۔ localStorage

export const ThemeName = atom<PaletteMode>({ key: "ThemeName", effects: [ (ctx) => { const storageKey = "theme"; if (ctx.trigger === "get") { const name: PaletteMode = localStorage?.getItem(storageKey) === "dark" ? "dark" : localStorage?.getItem(storageKey) === "light" ? "light" : matchMedia?.("(prefers-color-scheme: dark)").matches ? "dark" : "light"; ctx.setSelf(name); } ctx.onSet((value) => { localStorage?.setItem(storageKey, value); }); }, ],
});

مرحلہ 5: شامل کریں ThemeProvider ٹاپ لیول ری ایکٹ جزو تک

import { ThemeProvider } from "@mui/material";
import { useTheme } from "../theme/index.js"; function App(): JSX.Element { const theme = useTheme(); return ( <ThemeProvider theme={theme}> {/* ... */} </Theme> );
}

ملاحظہ کریں app/theme/index.ts in ری ایکٹ سٹارٹر کٹ

وسائل

ٹائم اسٹیمپ:

سے زیادہ Codementor React Fact