Junior
Ce este useContext în React?
sobes.tech AI
Răspuns de la AI
useContext este un hook în React care permite componentelor funcționale să se aboneze la modificările contextului. Oferă o modalitate de a transmite date prin arborele de componente fără a fi nevoie să pasezi explicit props la fiecare nivel.
Principiul de funcționare:
- Crearea contextului: Se folosește
React.createContext()pentru a crea un obiect de context. Acest obiect conține un Provider și un Consumer (sau se foloseșteuseContextîn componentele funcționale). - Furnizarea valorii: Componenta Provider a contextului înfășoară arborele de componente care trebuie să aibă acces la valoare. Prin prop-ul
valuese transmite valoarea care va fi disponibilă pentru toate componentele abonate. - Obținerea valorii:
useContext(MyContext)este apelat în interiorul unei componente funcționale, undeMyContexteste contextul creat anterior. Hook-ul returnează valoarea curentă a contextului. Când această valoare se schimbă, componenta care foloseșteuseContextse re-renderizează automat.
Avantaje:
- Ușurința în transmiterea datelor: Elimină necesitatea "prop drilling" prin multiple componente intermediare.
- Stare globală: Este util pentru gestionarea stării globale a aplicației (de exemplu, tema, autentificarea, localizarea).
- Performanță: React optimizează re-renderizarea componentelor care folosesc
useContext, re-renderizând doar cele abonate la schimbările contextului.
Dezavantaje:
- Dificultate în depanare: Poate fi mai dificil să urmărești de unde provine valoarea contextului comparativ cu props-urile.
- Performanță cu actualizări frecvente: Dacă valoarea contextului se actualizează foarte des, poate duce la re-render-uri frecvente ale tuturor componentelor abonate.
Exemplu:
import React, { createContext, useContext } from 'react';
// 1. Crearea contextului
const ThemeContext = createContext('light');
// Componenta provider
function ThemeProvider({ children }) {
const theme = 'dark'; // Valoare exemplu
return <ThemeContext.Provider value={theme}>{children}</ThemeContext.Provider>;
}
// Componenta care utilizează contextul
function ThemedComponent() {
// 3. Obținerea valorii din context
const theme = useContext(ThemeContext);
return <div style={{ background: theme === 'dark' ? '#333' : '#fff', color: theme === 'dark' ? '#fff' : '#000' }}>Tema: {theme}</div>;
}
// Aplicație
function App() {
return (
<ThemeProvider> {/* 2. Furnizarea valorii */}
<ThemedComponent />
</ThemeProvider>
);
}
export default App;