В моем приложении React мне нужно хранить некоторые данные, которые должны быть доступны почти везде, но не хотят хранить их в глобальной (то есть статической) структуре данных, чтобы было легко издеваться над моими модульными тестами и руководство по стилю.Как избежать глобального состояния в приложениях React?
Данные, которые я имею в виду, например:
- константа
IN_BROWSER
, которая находится в браузереtrue
строит иfalse
в узле. - постоянной
IS_MOBILE
, который инициализируется при старте в браузере - данные пользователя, которые в настоящее время вошли в системе,
- URL в API, что я подключиться к (который является локальным, устроив сервер, или производство, в зависимости от конфигурации)
Сейчас у меня есть файл с именем sessionData.js
, который хранит эти данные, и всякий раз, когда мне нужно, я require('./sessionData')
в моем коде и использовать его. Я могу издеваться над своими модульными тестами, используя rewire
, и, поскольку они выполняются последовательно, на данный момент он отлично работает. Это проблематично для styleguide, потому что каждый пример может отображать представление с точки зрения другого пользователя (поэтому в идеале каждый пример будет иметь свой собственный sessionData
).
IN_BROWSER
В настоящее время global
, что также оказывается плохой идеей, поскольку оно неявно зависит от кода инициализации от каждого модуля.
Я вижу, что могу передать свой sessionData
и другие вещи через опоры для каждого компонента по иерархии, но это похоже на избыточность.
Есть ли какой-либо дизайн, чтобы решить его лучше?
Это один хороший, но это помогает только для 1-го случая, в 'IN_BROWSER' постоянной. – mik01aj
@ m01 Я думал, вы можете добавить еще один аргумент в плагин, который указывает на ваш 'sessionData.js' модуль, чтобы вы могли использовать его, не требуя каждый раз. Но вам придется возвращать функцию вместо построенного объекта. Не уверен, подходит ли он. – Tulio
Проблема с sessionData заключается в том, что я не хочу, чтобы она была глобальной. Я хочу изменить его динамически для каждого модульного теста или каждого примера стилей. – mik01aj