Junior
Kas ir useContext React?
sobes.tech AI
Atbilde no AI
useContext - tas ir React hauss, kas ļauj funkcionālajām komponentēm abonēt izmaiņas kontekstā. Tas nodrošina datu nodošanas veidu caur komponentu koku bez nepieciešamības skaidri nodot propus katrā līmenī.
Darba princips:
- Konteksta izveide: Izmanto
React.createContext()konteksta objekta izveidei. Šis objekts satur Provider un Consumer (vaiuseContextfunkcijās komponentēs). - Vērtības nodrošināšana: Konteksta Provider aptver komponentu koku, kam nepieciešama piekļuve vērtībai. Ar
valueprop tiek nodota vērtība, kas būs pieejama visiem abonentiem. - Vērtības saņemšana:
useContext(MyContext)tiek izsaukts funkcijas komponentā, kurMyContextir iepriekš izveidots konteksts. Huks atgriež pašreizējo konteksta vērtību. Kad konteksta vērtība mainās, komponents, kas izmantouseContext, automātiski tiek pārrenderēts.
Priekšrocības:
- Viegla datu nodošana: Izslēdz nepieciešamību
prop drilling- nodot propus caur daudzām starpkomponentēm. - Globālais stāvoklis: Ērti pārvaldīt globālo stāvokli (piemēram, tēma, autentifikācija, lokalizācija).
- Veiktspēja: React optimizē
useContextlietojošo komponentu pārrenderēšanu, pārrenderējot tikai tos, kas ir abonējuši šo kontekstu.
Trūkumi:
- Dēbugošanas sarežģītība: Sekot, no kurienes nāk konteksta vērtība, var būt sarežģītāk nekā ar propiem.
- Veiktspēja biežu atjauninājumu gadījumā: Ja konteksta vērtība tiek bieži atjaunināta, tas var novest pie biežiem visu abonēto komponentu pārrenderēšanas.
Piemērs:
import React, { createContext, useContext } from 'react';
// 1. Konteksta izveide
const ThemeContext = createContext('light');
// Piegādātāja komponente
function ThemeProvider({ children }) {
const theme = 'dark'; // Piemēra vērtība
return <ThemeContext.Provider value={theme}>{children}</ThemeContext.Provider>;
}
// Konteksta lietošanas komponente
function ThemedComponent() {
// 3. Vērtības saņemšana
const theme = useContext(ThemeContext);
return <div style={{ background: theme === 'dark' ? '#333' : '#fff', color: theme === 'dark' ? '#fff' : '#000' }}>Tēma: {theme}</div>;
}
// Lietošana
function App() {
return (
<ThemeProvider> {/* 2. Vērtības nodrošināšana */}
<ThemedComponent />
</ThemeProvider>
);
}
export default App;