Может ли редукторный редуктор установить 2 ключа в состоянии, которые являются почти копиями 1 другого - PullRequest
0 голосов
/ 12 декабря 2018

У меня есть редукторный редуктор следующим образом:

function x(state = null, action){
   switch(action){
      case 'FILTER_DATA': {
        let { data } = state;
        let newData = someOperation(data);
        let s1 = deepCopy(newData);
        let s2 = s1.filter((v,i) => i%2);
        return {
          ...state,
          v1: s1,
          v2: s2
        };
     }
   }
}

Если s1 - это массив вложенных объектов - тогда некоторая глубокая ссылка внутри s2 также будет указывать на тот же объект в памяти.

Можно ли использовать редуктор для возврата измененного состояния - когда 2 ключа почти указывают на один и тот же объект?Это делает редуктор нечистым и весь код работает неправильно ??

1 Ответ

0 голосов
/ 12 декабря 2018

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

Лучше выполнить вычисления someOperation перед отправкой в ​​действие, чтобы сделать его чище,Вам не нужно создавать копию, пока вы не мутируете, поэтому вы можете удалить deepCopy.Все остальное в порядке, так как вы правильно объединяете объект.

Если вы хотите добавить несколько фильтров, вы можете добавить один редуктор и действие для каждого фильтра и скрестить их с помощью селекторов: https://github.com/reduxjs/reselect.

PS: лучше использовать const, следуя лучшим рекомендациям.

...