Можно ли получить доступ к контексту React из вспомогательной функции, отличной от React?
Например, у меня есть провайдер контекста, который сохраняет корневой слаг для страницы тематического исследования при загрузке приложения. Затем мне нужно создать URL-адреса, используя поставщика контекста в разных местах моего приложения. Поэтому я создал вспомогательную функцию для этого:
компоненты/caseStudies/index.jsx
import getCaseStudyPath from '../../lib/helpers/getCaseStudyPath';
const CaseStudies = ({ caseStudy }) => {
// caseStudy.slug === 'test-case-study'
const caseStudyPath = getCaseStudyPath(caseStudy.slug);
return (
<a href = {caseStudyPath}>Test</a>
);
};
библиотека/помощники/getCaseStudySlug
export default (slug) => {
// Get caseStudyRootSlug from React context
return `/${caseStudyRootSlug}/${slug}`;
// For example, this returns '/case-studies/test-case-study'
};
Я знаю, что могу просто использовать поставщика контекста в своем компоненте React или даже как HOC и просто передать значение вспомогательной функции, но мне нужно использовать эту вспомогательную функцию во всем моем приложении, и я не хочу накладных расходов на настройку до потребителя каждый раз, когда я хочу использовать его.
@IvanBurnaev Я раньше не сталкивался с useContext. Не могли бы вы предоставить больше информации об этом? Можно пример или ссылку?
Вот официальный API reactjs.org/docs/hooks-reference.html#usecontext и введение Дэна youtu.be/dpw9EHDh2bM. Но будьте осторожны: это все еще альфа-версия.
@IvanBurnaev Ах да, альфа мне не подходит. Я на производстве. Я не слишком заинтересован в глобальной переменной окна, потому что тогда я не получаю никаких преимуществ контекста React. Обидно, если в настоящее время это невозможно с контекстом React в рабочей среде, потому что кажется, что контекст React — это просто клиентское хранилище данных, поэтому имеет смысл получить к нему доступ из любого места в JavaScript.
Немного странно пытаться использовать контекст React вне самого React =). Ваша функция JavaScript ничего не знает о React и его контексте. Итак, есть проблема получения переменной, а вариантов у нее не так много: замыкание, глобальная переменная, передача параметров. ничего другого не представляю =(
Да, я вижу проблему. Хотя, в конце концов, я просто храню простой объект данных Javascript в своем контексте React, поэтому у других Javascript не должно возникнуть проблем с его чтением, если он может получить доступ.
Хуки официально выпущены в версии 16.8 (выпущенной 6 февраля) — они нет все еще находятся в альфа-версии.
Я только что попытался использовать useContext, и оказалось, что он работает только в функциональном компоненте без сохранения состояния (а не в обычной функции JS, такой как моя). В частности, я получаю ошибку Hooks can only be called inside the body of a function component.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Я вижу здесь два варианта: а) использовать глобальную переменную (окно), б) использовать хук контекста
useContext