Задать вопрос
chazovs
@chazovs
Корпорация Центр

Как обратиться к контексту, у которого нет имени?

Пытаясь изучить тему хуков, столкнулся с непониманием. Когда я использовал hoc, то объявлял контекст так:

const {
    Provider: CompaniesStoreServiceProvider,
    Consumer: CompaniesStoreServiceConsumer
      } = React.createContext();


А во всех примерах с хуками я вижу, что контекст объявляют как const myContext = React.createContext();

и потом обращаются к нему useContext('myContext');

Могу ли я, не изменяя своего способа создания контекста, обращаться к нему через хук useContext?
  • Вопрос задан
  • 52 просмотра
Подписаться 1 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Яндекс Практикум
    Мидл фронтенд-разработчик
    5 месяцев
    Далее
  • Яндекс Практикум
    React-разработчик
    3 месяца
    Далее
  • Яндекс Практикум
    Фронтенд-разработчик
    10 месяцев
    Далее
Решения вопроса 1
@ned4ded
Верстка, Фронтенд
Нет, нельзя.

В useContext() нужно передавать ссылку на объект контекста, которую вы не сохранили. В js к необъявленным объектам невозможно получить доступ. Более того, как только ссылка на объект не используется, сам объект удаляется garbage collector'ом.

const MyContext = React.createContext();

const {
    Provider: CompaniesStoreServiceProvider,
    Consumer: CompaniesStoreServiceConsumer
} = MyContext;

useContext(MyContext);


Как вариант, вы можете сделать хелпер/декортатор, который будет создавать контекст и возвращать объект, содержащий ссылку на контекст, провайдер и консьюмер; деструктурировать уже его.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Dasslier
FrontEnd Developer
Экспортируйте переменные CompaniesStoreServiceProvider, CompaniesStoreServiceConsumer. Оборачиваешь приложение в Provider, затем где нужно обратиться оборачивай в Consumer и доставай данные из пропсов
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
ITK academy Нижний Новгород
от 80 000 до 120 000 ₽
ITK academy Воронеж
от 50 000 до 90 000 ₽