мне из этого вложенного компонента этот контекст изменять?
Во-первых, ты тупо мутируешь объект. Создай стейт и меняй его. Во-вторых, в CompAB ты вызываешь useContext вне провайдера. Он будет работать только в дочерних компонентах.
менять стейт из функции increment ?
но функция increment вне каких либо компонентов располагается, как и сам объект контекста . Как из неё до стейтов дотянуться?
А должен быть внутри
э, но сам контекст определяется не внутри компонентов, иначе как его эспортировать
Сам контекст ты определяешь через createContext. А value передаешь в провайдер. Экспортировать значение не нужно.
разве при создании контекста не нужно указывать его дефолтное значение? из документации картинка
Нужно. Это то, что будет возвращаться, если ты вызовешь useContext вне провайдера
Засунь в него какое-нибудь дефолтное значение, а в качестве incrrment пустую функцию, этого будет достаточно
Стейты — это и есть содержимое контекста. Все компоненты, находящиеся внутри провайдера, будут иметь доступ к контексту. И содержимое контекста должно определяться там, где ты монтируешь провайдер, а не в единственном объекте где-то сбоку.
ну вот я определил промежуточный компонент CompR , чтобы его внутрь провайдера поместить и уже в нем useContext вызывать. Меняю внутри increment значение vc.a, но это ничего не меняет
дефолтное значение нельзя не передавать, ругается TypeScript на этапе компиляции
https://codesandbox.io/s/determined-stonebraker-swl673?file=/src/App.js
Обсуждают сегодня