Skip to content

Instantly share code, notes, and snippets.

@dmitriyzyuzin
Last active April 8, 2019 19:34
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dmitriyzyuzin/75ed7bbf44f45bddf4f1c83e21d05d83 to your computer and use it in GitHub Desktop.
Save dmitriyzyuzin/75ed7bbf44f45bddf4f1c83e21d05d83 to your computer and use it in GitHub Desktop.
React Context API simple example

React Context API

Для создания контекста нужно

  • Создать контекст при помощи React.createContext()
  • Передать данные (Provider)
  • Получить данные (Comsumer)

Демо: codesandbox

Подробнее

У нас есть приложение. Где-то в настройках юзер может задавать цветовую тему.
Нужно чтобы любой компонент в приложении мог получить это значение. Если компонентов много, то пробрасывать пропсы через все компоненты от родительского к дочерним слишком монструозно (да и переиспользование будет хромать при этом).

Выход - Context API. Создаем контекст с этими настройками пользователя. Прокидываем с использованием Provider'а нужное значение. При помощи Consumer'а забираем это значение.

const UserThemeContext = React.createContext({
  theme: "aqua"
});

Пусть в приложении есть ToolBar, который содержит ряд компонентов. Мы хотим, чтобы один из компонентов ToolBar'а Button получил доступ к теме пользователя. Оборачиваем Toolbar с помощью UserThemeContext.Provider:

<UserThemeContext.Provider value={{ theme: "red" }}>
        <ToolBar />
      </UserThemeContext.Provider>
    </div>

А в компоненте Button получаем значение через UserThemeContext.Consumer:

const Button = () => (
  <UserThemeContext.Consumer>
    {({ theme }) => {
      return <button style={{ backgroundColor: theme }}>Button</button>;
    }}
  </UserThemeContext.Consumer>
);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment