Можно ли иметь несколько состояний в хранилище Redux, которые обрабатываются раздельно редукторами комбайнов? - PullRequest
0 голосов
/ 28 марта 2019

Я просматривал некоторый код в приложении React-Redux и обнаружил, что в хранилище Redux есть три состояния, и изменения в каждом состоянии обрабатываются различными редукторами (объединяют редукторы).Аналогично следующему:

источник / модели

--model1
--model2
--model3

источник / редукторы / index.js

const rootReducer = combineReducers({
  model1Reducer,
  model2Reduce,
  model3Reducer
 })

источник / редукторы / модель1Редуктор

// import model1 here
const model1Reducer = (state = model1, action) { }

Аналогично, model2Reducer и model3Reducer импортируют model2 и model3 соответственно и действуют на него.

Является ли этот метод определения трех различных деревьев состояний приемлемым в Redux?Один из принципов Redux - единственный источник правды.Тогда как это хорошо?

Ответы [ 2 ]

0 голосов
/ 31 марта 2019

Вот правила для редукторов:

  1. Должен возвращать любое значение, кроме «undefined».
  2. Создает «состояние» или данные, которые будут использоваться внутри вашего приложения, используя только предыдущиесостояние и действие.
  3. Не должен выходить за пределы себя, чтобы решить, какое значение вернуть.
  4. Не должен изменять его аргумент входного состояния.

Ваш combineReducers будет выглядеть так:

export default combineReducers({
  property1: model1Reducer,
  property2: model2Reduce,
  property3: model3Reducer
}

Ваш конкретный редуктор будет выглядеть так:

export default () => {
  return 123;
}

Теперь, что я не показал выше, это синтаксис ES2015 (selectedSong = null), гдевы делаете что-то вроде этого:

const selectedSongReducer = (selectedSong = null, action) => {
  if (action.type === 'SELECTED_SONG') {
    return action.payload;
  }

  return selectedSong;
}

Это следует правилу 1, где мы должны возвращать любое значение, кроме undefined, потому что если мы этого не сделаем, мы получим неопределенное значение при загрузке приложения, поэтому мы реализуемЗначения аргумента по умолчанию из ES6 / ES2015.

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

Во второй раз ваш редуктор будет вызыватьсяonger будет undefined, первый аргумент будет тем, что он возвратил при последнем запуске.

Единственное, что изменяется при вызове редуктора - это объект действий.

0 голосов
/ 31 марта 2019

То, что вы описали здесь, является правильным способом использования избыточности и является тем же, что мы используем в моей организации.

Значение, лежащее в основе принципа "Единый источник истины", относится к

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

Мы используем комбинированные редукторы для отделения части нашегоприложение по логике и чтобы избежать ситуации, когда редуктор становится сложным с точки зрения обновления магазина.Это не значит, что это разделит магазин на несвязанные состояния.Каждый из них управляет независимыми частями вашего магазина.Это «просто» делает наш код более читабельным и модульным с точки зрения обслуживания.

Вот часть документов Redux, которая объясняет концепцию комбинированныхReducers

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

Вспомогательная функция объединениеReducers превращает объект, значения которого являются различными сокращающими функциями, водну сокращающую функцию, которую вы можете передать createStore.

Получившийся редуктор вызывает каждый дочерний редуктор и собирает их результаты в один объект состояния.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...