Junior
Kas yra useContext React?
sobes.tech AI
Atsakymas iš AI
useContext - tai React kabliukas, leidžiantis funkciniams komponentams prenumeruoti konteksto pokyčius. Jis suteikia būdą perduoti duomenis per komponentų medį be būtinybės aiškiai perduoti props kiekviename lygyje.
Veikimo principas:
- Konteksto sukūrimas: Naudojama
React.createContext()konteksto objekto sukūrimui. Šis objektas apima Provider ir Consumer (arbauseContextnaudojimą funkciniuose komponentuose). - Reikšmės teikimas: Konteksto Provider apgaubia komponentų medį, kuriems reikia prieigos prie reikšmės. Per
valueprop perduodama reikšmė, kuri bus prieinama visiems prenumeruojantiems komponentams. - Reikšmės gavimas:
useContext(MyContext)kviečiamas funkciniame komponente, kurMyContextyra anksčiau sukurtas kontekstas. Hukas grąžina dabartinę konteksto reikšmę. Kai konteksto reikšmė keičiasi, naudojantisuseContextkomponentas automatiškai perrenderinamas.
Privalumai:
- Lengvas duomenų perdavimas: Pašalina poreikį
prop drilling- perduoti props per daug tarpininkaujančių komponentų. - Globalus būsenos valdymas: Patogu valdyti globalią būseną (pvz., temos, autentifikacijos, lokalizacijos).
- Našumas: React optimizuoja
useContextnaudojančių komponentų perrenderinimą, perrenderindamas tik tuos, kurie prenumeruoja šį kontekstą.
Trūkumai:
- Derinimo sudėtingumas: Sekti, iš kur ateina konteksto reikšmė, gali būti sudėtingiau nei su props.
- Našumas dažnų atnaujinimų atveju: Jei konteksto reikšmė dažnai keičiasi, tai gali sukelti dažnus visų prenumeruojančių komponentų perrenderinimus.
Pavyzdys:
import React, { createContext, useContext } from 'react';
// 1. Konteksto sukūrimas
const ThemeContext = createContext('light');
// Teikėjo komponentas
function ThemeProvider({ children }) {
const theme = 'dark'; // Pavyzdinė reikšmė
return <ThemeContext.Provider value={theme}>{children}</ThemeContext.Provider>;
}
// Konteksto naudojimo komponentas
function ThemedComponent() {
// 3. Reikšmės gavimas
const theme = useContext(ThemeContext);
return <div style={{ background: theme === 'dark' ? '#333' : '#fff', color: theme === 'dark' ? '#fff' : '#000' }}>Tema: {theme}</div>;
}
// Naudojimas
function App() {
return (
<ThemeProvider> {/* 2. Reikšmės teikimas */}
<ThemedComponent />
</ThemeProvider>
);
}
export default App;