Возможно, вы читаете это, потому что поняли, что ваше приложение для реагирования требует некоторой подготовки, но вы хотите найти лучший способ сделать это. Сверление реквизита становится разочаровывающим и беспокойным в больших приложениях, и это также не рекомендуется. Вот тут-то и появляется контекст React.

React Context — это мощная функция, которая позволяет вам передавать данные вниз по дереву компонентов без необходимости передавать свойства через каждый уровень. В этой статье мы обсудим, как использовать React Context и когда его целесообразно использовать.

Что такое React-контекст?

React Context — это способ обмена данными между компонентами в приложении React без необходимости передавать свойства через каждый уровень дерева компонентов. Вместо этого вы можете создать объект контекста и передать его любому компоненту, который в нем нуждается.

Вот пример того, как создать объект контекста:

const MyContext = React.createContext(defaultValue);

Параметр defaultValue является необязательным и может использоваться для установки значения по умолчанию для контекста, если оно не было предоставлено родительским компонентом.

Как использовать контекст реакции

Чтобы использовать объект контекста, вам нужно использовать два компонента: поставщик и потребитель.

Компонент провайдера используется для переноса любых компонентов, которым требуется доступ к контексту. Вот пример:

<MyContext.Provider value={/* some value */}>
  <MyComponent />
</MyContext.Provider>

В этом примере MyContext.Provider — это компонент-поставщик, а MyComponent — это дочерний компонент, которому требуется доступ к контексту.

Чтобы получить доступ к контексту в MyComponent, вам нужно использовать потребительский компонент. Вот пример:

<MyContext.Consumer>
  {value => /* render something with value */}
</MyContext.Consumer>

В этом примере MyContext.Consumer — это компонент-потребитель, а параметр value — это значение, переданное компонентом-поставщиком.

Полный пример

Любимый компонент контекста страницы:

import { createContext, useState } from “react”;

const FavoritesContext = createContext({
 favorites: [],
 totalFavorites: 0,
});

function itemIsFavoriteHandler(meetupId){
 return userFavorites.some(meeetup=> meetup.id===meetupId)
 }

const context = {
 favorites: userFavorites,
 totalFavorites: userFavorites.length,
 itemIsFavorite: itemIsFavoriteHandler
 }

return <FavoritesContext.Provider value={context}>
 {props.children}
 </FavoritesContext.Provider>
}

export default FavoritesContext;

В этом примере мы создаем контекст с именем «FavoritesContext», который содержит массив «фаворитов» и количество «totalFavorites». Затем мы создаем объект «context» для использования в качестве свойства значения внутри ‹FavoritesContext.Provider›. Затем мы используем ‘{props.children}’ для передачи всех дочерних элементов вниз по дереву. Таким образом, все дочерние компоненты смогут «useContext(FavoritesContext)» и получить доступ к объекту «favorites» и значению «totalFavorites».

Когда использовать React-контекст

React Context — мощный инструмент, но его не всегда нужно использовать. Вот некоторые ситуации, когда использование React Context может быть уместным:

  • Когда у вас есть данные, которые должны быть разделены несколькими компонентами, не связанными напрямую друг с другом.
  • Когда у вас есть данные, к которым необходимо получить доступ с помощью глубоко вложенных компонентов.
  • Когда у вас есть данные, к которым необходимо получить доступ большому количеству компонентов.

В общем, вам следует избегать использования React Context для данных, доступ к которым требуется только для нескольких тесно связанных компонентов. В таких ситуациях обычно бывает достаточно передачи реквизита вниз по дереву компонентов.

Заключение

React Context — это мощная функция, упрощающая обмен данными между компонентами в приложении React. Используя объект контекста, вы можете избежать передачи свойств через каждый уровень дерева компонентов и сделать свой код более читабельным и удобным для сопровождения.

Однако важно использовать React Context разумно и только тогда, когда это уместно. Тщательно продумав, когда использовать React Context и когда использовать другие методы, такие как передача реквизитов, вы можете писать более чистый, удобный для сопровождения код и делать свои приложения React более эффективными и понятными.