Я создаю контекст и провайдера, как показано ниже. Как вы можете видеть, я использую useState () в своем провайдере (для состояния) вместе с функциями (все они передаются в объекте как значение prop, что позволяет легко деструктурировать все, что мне нужно в дочерних компонентах).
import React, { useState, createContext } from "react";
const CountContext = createContext(null);
export const CountProvider = ({ children }) => {
const [count, setCount] = useState(0);
const incrementCount = () => {
setCount(count + 1);
};
const decrementCount = () => {
setCount(count - 1);
};
return (
<CountContext.Provider value={{ count, incrementCount, decrementCount }}>
{children}
</CountContext.Provider>
);
};
export default CountContext;
Я обертываю свое приложение в таком провайдере (ах) в более высоком месте, например, в index. js. И использовать состояние с помощью useContext (), как показано ниже.
import React, { useContext } from "react";
import CountContext from "../contexts/CountContext";
import Incrementer from "./Incrementer";
import Decrementer from "./Decrementer";
const Counter = () => {
const { count } = useContext(CountContext);
return (
<div className="counter">
<div className="count">{count}</div>
<div className="controls">
<Decrementer />
<Incrementer />
</div>
</div>
);
};
export default Counter;
Все работает просто отлично, и я считаю, что проще поддерживать вещи таким образом по сравнению с некоторыми другими методами (общего) управления состоянием .
CodeSandbox: https://codesandbox.io/s/react-usecontext-simplified-consumption-hhfz6
Мне интересно, есть ли здесь ошибка или недостаток, которые я еще не заметил?