سلام امروز اومدم با یه پست جدید
در ریکت معمولا داده ها از طریق props ها از پدر به فرزند ها منقل میشن. اما فرص کنیم کلی دیتا داریم ک اگر بخواهیم از props ها استفاده کنیم کلی دشوار میشه و کد نویسی کثیف از نظر من:)
پس اینجا context ها منبعی هستن برای نوشتن state های سراسری
که بالاترین لایه تعریف میشوند و فرزندها به اون state ها دسترسی دارن.
value
را میپذیرد که در واقع مقدار رو میگیره برامون نگه میداره. یعنی برای بروزرسانی داده هامون از این قابلیت استفاده میکنیم.در اینجا میخواهم custom theme را با context پیاده سازی کنم:
import React, { createContext, useState } from "react" const ThemeColors = { primary: "brown", dark: "#000", light: "#fff", };
ابتدا یه ابجکتی از رنگ هایی که قرار است استفاده کنم میسازم.
که در اینجا فقط از دو کلید dark و light استفاده کردم
import React, { createContext, useState } from "react" const ThemeColors = { primary: "brown", dark: "#000", light: "#fff", }; export const ThemeColorContext = createContext({ color: ThemeColors.dark, changeColor: (color) => {}, });
خب بریم سراغ ساخت wrapper مون که توش یه state با مقدار default و یه تابع برای عوض کردن رنگ نوشته شده و سپس تو خروجیمون context که ساخته شده با provider و value که داده شده مینویسم.
export function ThemeColorWrapper({ children }) { const [color, setColor] = useState(ThemeColors.dark); function changeColor(color) { setColor(color); } return ( <ThemeColorContext.Provider value={{ color: color, changeColor: changeColor }}> {children} </ThemeColorContext.Provider>
حال ThemeColorWrapper یه لایه کانتکس شده که هرجایی ک بخواهیم استفاده کنیم تو لایه های بالاتر میپیچیمش تا children ها به مقدارا دسترسی داشته باشن.
حال هر کامپوننتی که تو Main باشه به context دسترسی دارن.
return ( <ThemeColorContext> <Main /> <ThemeColorContext/> );
سپس تو کامپوننت های پایین تر وقتی که قراره استفاده بشه از context به این روش از هوک خود ریکت useContext و ورودی بهش همون context ساخته شده داده میشود
import React,{useContext) from "react" const Dashboard = () => { const dataColor = useContext(ThemeColorContext); }
سپس یه دکمه گذاشتم برای تغغیر رنگ که با رویداد کلیک تابع changeColor که در context ساخته شده رو فراخوانی میکند و چیزی که برمیگردونه رو تاثیرش رو همه ی کامپوننت های children میباشد.
<button ={() => changeColor("dark")}>dark</button>; <nav style={{background:color}}>welcome</nav>
خب اینم از آموزش امروز امیدوارم که براتون مفید باشه. اگ چیزی از قلم انداختم خوشحال میشم نظرتون رو تو کامنت برام بنویسید.