Junior
Čo je useContext v React?
sobes.tech AI
Odpoveď od AI
useContext - je hák v React, ktorý umožňuje funkčným komponentom prihlásiť sa na zmeny v kontexte. Poskytuje spôsob prenosu dát cez strom komponentov bez potreby explicitne prenášať props na každej úrovni.
Princíp fungovania:
- Vytvorenie kontextu: Používa sa
React.createContext()na vytvorenie objektu kontextu. Tento objekt obsahuje Provider a Consumer (alebo sa používauseContextvo funkčných komponentoch). - Poskytnutie hodnoty: Provider komponent kontextu obklopí strom komponentov, ktorým je potrebné mať prístup ku hodnote. Prostredníctvom prop
valuesa odovzdá hodnota, ktorá bude dostupná všetkým prihláseným komponentom. - Získanie hodnoty:
useContext(MyContext)sa volá vo vnútri funkčnej komponenty, kde jeMyContextvytvorený skôr. Hák vráti aktuálnu hodnotu kontextu. Keď sa hodnota kontextu zmení, komponent, ktorý používauseContext, sa automaticky prekreslí.
Výhody:
- Jednoduché prenos dát: Odstraňuje potrebu "pretiahnutia" props cez množstvo medzičiastkových komponentov (
prop drilling). - Globálny stav: Vhodné na správu globálneho stavu aplikácie (napríklad tému, autentifikáciu, lokalizáciu).
- Výkon: React optimalizuje renderovanie komponentov, ktoré používajú
useContext, prekresľujúc iba tie, ktoré sú prihlásené na zmeny tohto kontextu.
Nevýhody:
- Zložitosť ladenia: Sledovanie, odkiaľ prichádza hodnota kontextu, môže byť zložitejšie v porovnaní s props.
- Výkon pri častých aktualizáciách: Ak sa hodnota kontextu aktualizuje veľmi často, môže to viesť k častým prekresleniam všetkých prihlásených komponentov.
Príklad:
import React, { createContext, useContext } from 'react';
// 1. Vytvorenie kontextu
const ThemeContext = createContext('light');
// Komponenta-poskytovateľ
function ThemeProvider({ children }) {
const theme = 'dark'; // Príkladová hodnota
return <ThemeContext.Provider value={theme}>{children}</ThemeContext.Provider>;
}
// Komponenta využívajúca kontext
function ThemedComponent() {
// 3. Získanie hodnoty kontextu
const theme = useContext(ThemeContext);
return <div style={{ background: theme === 'dark' ? '#333' : '#fff', color: theme === 'dark' ? '#fff' : '#000' }}>Téma: {theme}</div>;
}
// Použitie
function App() {
return (
<ThemeProvider> {/* 2. Poskytnutie hodnoty */}
<ThemedComponent />
</ThemeProvider>
);
}
export default App;