الخطوات الأساسية
- إنشاء السياق باستخدام createContext.
- توفير قيمة السياق باستخدام Provider.
- قراءة قيمة السياق باستخدام useContext.
مثال عملي
1. إنشاء السياق
أولاً، نقوم بإنشاء سياق جديد باستخدام createContext.
| // ThemeContext.jsimport { createContext } from 'react';
 
 export const ThemeContext = createContext('light');
 
 
 
 | 
2. توفير قيمة السياق
نقوم بلف المكونات في Provider لتوفير قيمة السياق.
| // App.jsimport React, { useState } from 'react';
 import { ThemeContext } from './ThemeContext';
 import Page from './Page';
 
 function App() {
 const [theme, setTheme] = useState('dark');
 
 const toggleTheme = () => {
 setTheme((prevTheme) => (prevTheme === 'dark' ? 'light' : 'dark'));
 };
 
 return (
 <ThemeContext.Provider value={{ theme, toggleTheme }}>
 <Page />
 </ThemeContext.Provider>
 );
 }
 
 export default App;
 
 
 
 | 
3. قراءة قيمة السياق
نستخدم useContext لقراءة قيمة السياق في مكون فرعي.
| // Button.jsimport React, { useContext } from 'react';
 import { ThemeContext } from './ThemeContext';
 
 function Button() {
 const { theme, toggleTheme } = useContext(ThemeContext);
 return <button className={theme} onClick={toggleTheme}>Click me</button>;
 }
 
 export default Button;
 
 
 
 | 
4. استخدام المكونات
نقوم بدمج المكونات معًا.
| // Page.jsimport React from 'react';
 import Button from './Button';
 
 function Page() {
 return (
 <div>
 <h1>Welcome to the themed page!</h1>
 <Button />
 </div>
 );
 }
 
 export default Page;
 
 
 
 | 
شرح المثال 
- ThemeContext.js: نقوم بإنشاء سياق جديد بقيمة افتراضية ‘light’.
- App.js: نستخدم ThemeContext.Providerلتوفير قيمة السياق ‘dark’ لجميع المكونات داخلPage.
- Button.js: نستخدم useContextلقراءة قيمة السياق وتطبيقها على زر.
- Page.js: نعرض مكون Buttonداخل صفحة.
بهذا الشكل، يمكننا تمرير البيانات بين المكونات بسهولة باستخدام createContext و useContext.
مثال على CSS لتوضيح التغيير
يمكنك إضافة بعض الأنماط لتوضيح التغيير بشكل أفضل:
| /* styles.css */button.dark {
 background-color: black;
 color: white;
 }
 
 button.light {
 background-color: white;
 color: black;
 }
 
 
 
 | 
 
تعليقات
إرسال تعليق