Хук контекста React может помочь упростить ситуацию с «цепочкой реквизитов», когда у нас есть межкомпонентные состояния, и нам нужно передать их с помощью реквизитов через несколько слоев компонентов, фактически не нуждаясь в них по пути.
Взгляните на этот App
компонент, который имеет userName
const App = () => { const userName = ... return ( <> <Home userName = userName /> ... </> ); }
В компоненте Home
, которому на самом деле не нужен userName
, но у него есть дочерний компонент Form
, которому требуется userName
. В этом случае компонент Home
должен получить userName
из реквизита и передать его Form
, что может быть излишним и запутанным.
const Home = (props) => { return ( <> <Form userName = props.userName /> ... </> ); }
Как контекст может помочь
Контекст React помогает управлять межкомпонентными состояниями, имея централизованное место для управления состоянием и избегая цепочки реквизитов.
Шаг 1. Создайте контекст
Создайте файл контекста в своем проекте по предпочтительному пути, например, src/store/user-context.js
. Обратите внимание, что я назвал файл user-context
, так как в нем будут храниться пользовательские данные.
import React from "react"; const UserContext = React.createContext({ name: "" }); export default UserContext;
Шаг 2: Создайте производителя контекста
Я буду использовать тот же пример, что и выше. Мы хотели бы передать userName
из компонента App
в компонент Form
. С провайдером контекста вам нужно только передать userName
UserContext
для использования в любом месте.
const App = () => { const[userName, setUserName] = setState(); ... return ( <UserContext.provider value={ {name: userName} }> <Home /> ... </UserContext.provider> ); }
Шаг 3: Создайте потребителя контекста
В компоненте Form, где мы хотим использовать userName
(не хранится как name
в UserContext
), создайте переменную с хуком useContext()
, как в примере, и получите прямой доступ к любому сохраненному значению.
const Form = () => { const userCtx = useContext(UserContext); ... return ( <> <div>Hello {userCtx.name}</div> ... </> ); }
Контекст React — это один из способов централизованного управления состояниями в вашем приложении. Однако это не окончательное решение. Если ваше приложение очень сложное, содержит много контекста или много изменений состояния, вы также можете рассмотреть реагирование с редукцией.