სტრატეგიული ფიქრი არქიტექტურაზე და ოპტიმიზაცია
Context არ არის "Global State Magic". ის არის ინსტრუმენტი ლოკალური "ხის" მასშტაბით ინფორმაციის გადასაცემად.
| გამოიყენე Context | არ გამოიყენო Context |
|---|---|
| თემები (Light/Dark Mode) | მონაცემები, რომლებიც წამში ბევრჯერ იცვლება |
| მომხმარებლის ავტორიზაცია | ფორმების "Input" სტეიტებისთვის |
| ლოკალიზაცია (ენა) | თუ Prop Drilling მხოლოდ 2 დონეა |
განვიხილოთ რთული შემთხვევა: როდესაც Context-ში გვაქვს ობიექტი.
საუკეთესო პრაქტიკა: useMemo-ს გამოყენებაimport { createContext, useState, useMemo, useContext } from 'react'; const AppContext = createContext(); export const AppProvider = ({ children }) => { const [user, setUser] = useState(null); const [theme, setTheme] = useState('light'); // 🚀 ოპტიმიზაცია: მნიშვნელობა იქმნება მხოლოდ მაშინ, როცა user ან theme იცვლება. // ეს თავიდან აგვაცილებს ზედმეტ რერენდერებს. const value = useMemo(() => ({ user, theme, login: (data) => setUser(data), toggleTheme: () => setTheme(t => t === 'light' ? 'dark' : 'light') }), [user, theme]); return ( <AppContext.Provider value={value}> {children} </AppContext.Provider> ); };
const Button = () => { const ctx = useContext(AppContext); // კომპონენტი პირდაპირ // არის მიბმული კონტექსტზე return ( <button onClick={ctx.toggleTheme}> {ctx.theme} </button> ); };
const Button = ({ onClick, label }) => ( // კომპონენტი დამოუკიდებელია // და მარტივია ტესტირებისთვის <button onClick={onClick}> {label} </button> ); const ThemeBtn = () => { const { theme, toggleTheme } = useTheme(); return <Button onClick={toggleTheme} label={theme} />; };
/* Modern & Performant CSS */ [data-theme='dark'] { --primary: #bb86fc; --surface: #121212; } .card { background: var(--surface); color: var(--primary); /* React მხოლოდ ატრიბუტს ცვლის, დანარჩენს ბრაუზერი აკეთებს */ }
თუ კონტექსტის მომხმარებელი კომპონენტი რენდერდება ძალიან ხშირად: