اذهب إلى المحتوى
  • 0

كيف يمكن تغيير الثيم باستخدام تفضيلات المستخدم وكيف يمكن حفظ التفضيل المحدد عند تحميل الصفحة في React؟

Abdelrahman Mostafa10

السؤال

أحاول تغيير ثيم الموقع في React.js، من أجل تحويل الثيم إلى Dark mode، فكيف أقوم بذلك بشكل صحيح، بحيث يظل الثيم ثابت كما يفضله المستخدم عندما يعود للموقع مرة أخرى؟

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 0

يمكن عمل dark mode في العموم بأكثر نمن حل و الفكرة دائما تقوم على تخزين ملف يحتوي على المتغيرات التي تحتوي على الوان او متغيرات الخاصة بالtheme 
و هذة المتغيرات اما يتم تخزينها في ملف في الكود نفسة أو في الcss variables  و يمكن تخزينها في context او استعمال redux 
مثال على استعمال الcss variable :
 

:root {
  --background-color: #ffffff; /* اللون العادي */
  --text-color: #000000; /* لون النص في الوضع العادي */
}

.dark-mode {
  --background-color: #121212; /* اللون في وضع الظلام */
  --text-color: #ffffff; /* لون النص في وضع الظلام */
}

body {
  background-color: var(--background-color);
  color: var(--text-color);
}

_________________
مثال على استعمال context :
 

import React, { useState, useEffect } from 'react';

const ThemeContext = React.createContext();

const ThemeProvider = ({ children }) => {
  const [isDarkMode, setDarkMode] = useState(false);

  useEffect(() => {
    const savedDarkMode = localStorage.getItem('darkMode');
    if (savedDarkMode) {
      setDarkMode(savedDarkMode === 'true');
    }
  }, []);

  const toggleDarkMode = () => {
    setDarkMode((prevMode) => {
      const newMode = !prevMode;
      localStorage.setItem('darkMode', newMode.toString());
      return newMode;
    });
  };

  return (
    <ThemeContext.Provider value={{ isDarkMode, toggleDarkMode }}>
      {children}
    </ThemeContext.Provider>
  );
};

const useTheme = () => {
  const context = React.useContext(ThemeContext);
  if (!context) {
    throw new Error('useTheme must be used within a ThemeProvider');
  }
  return context;
};

export { ThemeProvider, useTheme };

_________________________
أما بالنسبة لسؤال كيف يمكن تخزين الحالة حتا تكون نفسها عند عودة المستخدم مرة أخرى فللقيام بذلك نستعمل الlocal storage و نقوم بفحصها كل مرة يقوم المستخدم بذيارة الموقع 
 

استخدم localStorage لتخزين حالة الثيم بين جلسات التصفح.
 

useEffect(() => {
  localStorage.setItem('darkMode', isDarkMode.toString());
}, [isDarkMode]);

عند تحميل الصفحة، قم بقراءة حالة الثيم من localStorage وقم بتعيينها لـ isDarkMode في التأثير الجانبي.
 

useEffect(() => {
  const savedDarkMode = localStorage.getItem('darkMode');
  if (savedDarkMode) {
    setDarkMode(savedDarkMode === 'true');
  }
}, []);

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...