Доступ к контексту React из обычной функции

Можно ли получить доступ к контексту 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 и просто передать значение вспомогательной функции, но мне нужно использовать эту вспомогательную функцию во всем моем приложении, и я не хочу накладных расходов на настройку до потребителя каждый раз, когда я хочу использовать его.

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

Ivan Burnaev 08.02.2019 12:14

@IvanBurnaev Я раньше не сталкивался с useContext. Не могли бы вы предоставить больше информации об этом? Можно пример или ссылку?

CaribouCode 08.02.2019 12:17

Вот официальный API reactjs.org/docs/hooks-reference.html#usecontext и введение Дэна youtu.be/dpw9EHDh2bM. Но будьте осторожны: это все еще альфа-версия.

Ivan Burnaev 08.02.2019 12:24

@IvanBurnaev Ах да, альфа мне не подходит. Я на производстве. Я не слишком заинтересован в глобальной переменной окна, потому что тогда я не получаю никаких преимуществ контекста React. Обидно, если в настоящее время это невозможно с контекстом React в рабочей среде, потому что кажется, что контекст React — это просто клиентское хранилище данных, поэтому имеет смысл получить к нему доступ из любого места в JavaScript.

CaribouCode 08.02.2019 12:31

Немного странно пытаться использовать контекст React вне самого React =). Ваша функция JavaScript ничего не знает о React и его контексте. Итак, есть проблема получения переменной, а вариантов у нее не так много: замыкание, глобальная переменная, передача параметров. ничего другого не представляю =(

Ivan Burnaev 08.02.2019 12:37

Да, я вижу проблему. Хотя, в конце концов, я просто храню простой объект данных Javascript в своем контексте React, поэтому у других Javascript не должно возникнуть проблем с его чтением, если он может получить доступ.

CaribouCode 08.02.2019 12:57

Хуки официально выпущены в версии 16.8 (выпущенной 6 февраля) — они нет все еще находятся в альфа-версии.

Ryan Cogswell 09.02.2019 17:44

Я только что попытался использовать useContext, и оказалось, что он работает только в функциональном компоненте без сохранения состояния (а не в обычной функции JS, такой как моя). В частности, я получаю ошибку Hooks can only be called inside the body of a function component.

CaribouCode 14.02.2019 12:06
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
8
1 397
0

Другие вопросы по теме