Skip to main content

Що робить <Context.Provider>?

Що робить <Context.Provider> в React

<Context.Provider> - це компонент-обгортка, який "надає" значення контексту всім своїм нащадкам. Він - єдиний спосіб задати або змінити значення контексту.


Синтаксис

javascript
<MyContext.Provider value={значення}> {/* нащадки, які зможуть використовувати цей контекст */} </MyContext.Provider>

Простіше кажучи:

Provider - це як "радіостанція", а всі компоненти, які використовують useContext(MyContext), - це "приймачі". Provider "транслює" значення, і всі підписники отримують його.


Приклад

javascript
import { createContext, useContext } from "react"; const ThemeContext = createContext("light"); function App() { return ( <ThemeContext.Provider value="dark"> <Toolbar /> </ThemeContext.Provider> ); } function Toolbar() { return <Button />; } function Button() { const theme = useContext(ThemeContext); return <button className={theme}>Поточна тема: {theme}</button>; }

Що відбувається:

  1. Ми створили контекст ThemeContext.
  2. У компоненті App обгорнули дочірні компоненти в <ThemeContext.Provider>.
  3. Вказали value="dark".
  4. Компонент Button через useContext(ThemeContext) отримує "dark", навіть якщо він глибоко вкладений.

Важливі особливості

ОсобливістьОпис
Область діїУсі нащадки Provider мають доступ до value
ОновленняЯкщо value змінюється → всі підписники перерендерюються
Кілька рівнівМожна вкладати кілька Providers з різними значеннями
Без ProviderЯкщо компонент не обгорнутий у Provider, береться defaultValue, вказаний при createContext(defaultValue)

Приклад з оновленням значення

javascript
const ThemeContext = createContext(); function App() { const [theme, setTheme] = useState("light"); return ( <ThemeContext.Provider value={theme}> <Toolbar /> <button onClick={() => setTheme(t => t === "light" ? "dark" : "light")}> Перемкнути тему </button> </ThemeContext.Provider> ); }

Тепер усі компоненти, що використовують useContext(ThemeContext), будуть автоматично змінювати тему, коли користувач натискає кнопку.


Підсумок

<Context.Provider>:

  • задає значення контексту (value),
  • робить його доступним усім вкладеним компонентам,
  • при зміні value викликає перерендер усіх споживачів контексту.

Коротка відповідь

Для співбесіди
Premium

Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.