Автор оригинала: Mohit Prakash.
Есть много способов обработки глобальных государственных управлений, таких как redux, mobx, комбинезон и т. Д. Если вы уже использовали redux, вы помните действие, хранить, редуктор и некоторые функции, такие как Connect (), USESTATETOPOOPS, USEDISHISCATCHTOPROPS могут получить доступ к состоянию.
Но теперь в React 16.8 и выше, вам не нужно использовать третьей сторонней библиотеке Redux. РЕАКТ обеспечивает свои собственные крючки и API, такие как упреждающий текст.
Зачем реагировать контекст?
Представьте, что у вас есть 5 компонентов, и вы хотите поделиться состоянием из одного компонента на другое, но вы можете поделиться государством от родителей к дочерному компоненту, используя реквизиты и ребенка для родителей, используя Ref или Callback. В приведенном выше показателе вы можете поделиться состоянием из компонента 1 к компоненту 4, компонент 2 к компоненту 5 и компонента 3 к компоненту 5 и наоборот. Но если вы хотите поделиться данными из компонента 1 до компонента 2 или компонента 3, вы не можете сделать.
** Это где контекст приходит к спасению. **
Что такое контекст Ract?
API React Context позволяет легко получать доступ к данным на разных уровнях дерева компонентов. Он создает родительский компонент, который является контекстом, и он хранит все данные, которые доступны из всех компонентов проекта. В приведенном выше рисунке хранение хранит все состояния всех компонентов, и все компоненты будут получать доступ к всем состояниям любого компонента.
Как работает контекст?
1. Создание контекста счетчика и добавление нового управления государством
import React, { useReducer } from "react"; let reducer = (state, action) => { switch (action.type) { case "INCREMENT": return { ...state, count: state.count + 1 }; case "DECREMENT": return { ...state, count: state.count - 1 }; default: return; } }; const initialState = { count: 0 } const CounterContext = React.createContext(initialState); function CounterProvider(props) { const [state, dispatch] = useReducer(reducer, initialState); return ({props.children} ); } export { CounterContext, CounterProvider };
Если вы работали с Redux раньше, это, вероятно, будет выглядеть знакомым.
Мы сделали пару вещей здесь
- Создайте контртонтуку, который требуется как инициативный и экспортируем поставщики и контекст.
- Создайте редуктор, который принимает состояние и действие.
- Используйте деструктурируют массив, чтобы получить Государство и Отправка объект из Успеведщик Отказ
- Передайте значение {State, Dispatch} в CounterContext.Provider, поэтому мы можем передать общее состояние и отправлять всем компонентам.
2. Получите общие состояния и отправлять объекты в компонентах
function Counter() { const { state, dispatch } = useContext(CounterContext); return (); }Count: {state.count}
Так как мы прошли Государство и Отправка объекты как значение Countercontext.Provider Отказ Таким образом, он возвращает объект, имеющий функцию состояния и отправки. Мы можем использовать объект, используя USECONTEXT (COUNCONTEXT) и это возвращается как
{ state: { count: 0 }, dispatch: fn() }
Если мы нажмем + кнопка затем отправляется и пропустите аргументы {Тип: “Приращение”} Затем функция редуктора должна позвонить, когда коммутатор сравнивает тип, и он возвращает {… состояние, счет: country.count + 1} Это означает, что счет увеличится на 1 и USECONTEXT () Потяните состояние из контекста.
Ссылка: https://reactjs.org/docs/hooks-reference.html#UseContext.