React Context - bu global tarzda holatni boshqarish usuli.
Bu useState
Hook bilan birga ishlatilishi mumkin, bu holatni chuqur joylashgan komponentlar orasida osonroq bo'lishiga yordam beradi.
Holat, holatga kirish zarur bo'lgan eng yuqori ota komponentda saqlanishi kerak.
Misol uchun, ko'plab ichki komponentlar mavjud. Pilet ustida va pastki qismidagi komponentlar holatga kirish zarur.
Agar Contextdan foydalanmasak, biz holatni har bir ichki komponent orqali "props" sifatida uzatishimiz kerak bo'ladi. Bu "prop drilling" deb ataladi.
Ichki komponentlar orqali "props" uzatish:
import { useState } from 'react';
import ReactDOM from 'react-dom/client';
function Component1() {
const [user, setUser] = useState('Jesse Hall');
return (
<>
<h1>{`Salom ${user}!`}</h1>
<Component2 user={user} />
</>
);
}
function Component2({ user }) {
return (
<>
<h1>Component 2</h1>
<Component3 user={user} />
</>
);
}
function Component3({ user }) {
return (
<>
<h1>Component 3</h1>
<Component4 user={user} />
</>
);
}
function Component4({ user }) {
return (
<>
<h1>Component 4</h1>
<Component5 user={user} />
</>
);
}
function Component5({ user }) {
return (
<>
<h1>Component 5</h1>
<h2>{`Yana salom ${user}!`}</h2>
</>
);
}
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(<Component1 />);
Garchi 2-4 komponentlar holatga muhtoj bo'lmasa ham, ular holatni o'tkazishlari kerak edi, shunda bu holat 5-komponentga yetib borishi mumkin.
Yechim - Context yaratishdir.
Context yaratish uchun, createContext
-ni import qilish va uni inicializatsiya qilish kerak:
import { useState, createContext } from 'react';
import ReactDOM from 'react-dom/client';
const UserContext = createContext();
Keyingi qadamda, Context Provider yordamida holat Contexti kerak bo'lgan komponentlar daraxtini o'rab chiqamiz.
Bolalar komponentlarni Context Provider bilan o'ralgan va holat qiymatini taqdim etamiz.
function Component1() {
const [user, setUser] = useState('Jesse Hall');
return (
<UserContext.Provider value={user}>
<h1>{`Salom ${user}!`}</h1>
<Component2 />
</UserContext.Provider>
);
}
Endi bu daraxtdagi barcha komponentlar UserContext
-ga kirish huquqiga ega bo'ladi.
Bolalar komponentda Contextdan foydalanish uchun useContext
Hook-dan foydalanishimiz kerak.
Birinchidan, useContext
import bayonotiga qo'shilsin:
import { useState, createContext, useContext } from 'react';
Keyin barcha komponentlarda UserContext
-ni olishingiz mumkin:
function Component5() {
const user = useContext(UserContext);
return (
<>
<h1>Component 5</h1>
<h2>{`Yana salom ${user}!`}</h2>
</>
);
}
Bu yerda React Context yordamida to'liq misol keltirilgan:
import { useState, createContext, useContext } from 'react';
import ReactDOM from 'react-dom/client';
const UserContext = createContext();
function Component1() {
const [user, setUser] = useState('Jesse Hall');
return (
<UserContext.Provider value={user}>
<h1>{`Salom ${user}!`}</h1>
<Component2 />
</UserContext.Provider>
);
}
function Component2() {
return (
<>
<h1>Component 2</h1>
<Component3 />
</>
);
}
function Component3() {
return (
<>
<h1>Component 3</h1>
<Component4 />
</>
);
}
function Component4() {
return (
<>
<h1>Component 4</h1>
<Component5 />
</>
);
}
function Component5() {
const user = useContext(UserContext);
return (
<>
<h1>Component 5</h1>
<h2>{`Yana salom ${user}!`}</h2>
</>
);
}
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(<Component1 />);