Должен ли я хранить статическую конфигурацию в redux?

#reactjs #redux

#reactjs #redux

Вопрос:

Я создаю веб-приложение react / redux и задаюсь вопросом, где мне следует хранить информацию о статической конфигурации, которая никогда не меняется (пока веб-приложение все равно запущено).

Это данные, о которых идет речь

Эта информация используется в разных частях приложения, например: существует форма, в которой вы можете выбрать любой элемент из основного массива и, поступая таким образом, заполнить другое поле выбора свойствами выбранного массива:

 <select>Choose an exchange</select>
<select>Choose a market (that is available in the above exchange)</select>
  

Это было бы неплохо для некоторой логики редуктора (которая устанавливается state.markets на основе того, что выбрано в первом select ), но должна ли она фильтровать на основе другого состояния в дереве или просто загружать данные в замыкании внутри редуктора (сохраняя все несвязанное за пределами дерева состояний)? Или это вообще не состояние (и должен ли контейнер загружать этот файл и фильтровать на основе одного state.exchange параметра состояния)?

Когда форма заполнена, результат будет обработан следующим образом:

 {exchange: 'a', market: 'b'}
  

Так что это тоже было бы состоянием (я полагаю?)

Комментарии:

1. Если эти опубликованные вами данные никогда не изменятся, я бы просто оставил их в виде модуля такими, какие они есть у вас. затем вы можете импортировать ее везде, где вам нужно прочитать любое из этих полей.

Ответ №1:

Насколько я понимаю redux , мы должны хранить только данные с сохранением состояния в store , то есть данные, которые могут быть изменены. Статические данные по определению не имеют состояния, и поэтому их не нужно отслеживать как таковые.

В результате у меня обычно есть /common/app-const.js файл, в котором я храню эти типы статических объектов. В вашем случае вы можете просто переместить все статические данные из exchange.js в общий файл, который вы затем import используете везде, где вам это нужно.

/common/app-const.js

 export default {
    markets: [
          { pair: ['USD', 'BTC'], minimalOrder: { amount: 0.01, unit: 'asset' } },
          { pair: ['RUR', 'BTC'], minimalOrder: { amount: 0.01, unit: 'asset' } },
          { pair: ['EUR', 'BTC'], minimalOrder: { amount: 0.01, unit: 'asset' } },
          ...
}
  

Однако я понимаю ваш подход, было бы неплохо просто ввести ваши данные с помощью connect() via react-redux , однако немного проще просто import извлекать статические данные из файла, где это необходимо.

Комментарии:

1. Слово в вашем последнем абзаце, хотя оно и более «простое», оператор import в файл статических данных создает очень жесткую зависимость от этого файла. Redux предоставляет форму внедрения зависимостей в этом отношении.