Начальное состояние Redux для редуктора переменных

В моей программе есть несколько сеток, но они очень похожи, поэтому я решил сделать один редуктор для всех, чтобы мой код оставался красивым и СУХИМ. Когда я отправляю событие для изменения хранилища, я отправляю имя сетки в качестве аргумента вместе с payoload, и все записывается в хранилище под этим именем сетки.

Например: если я отправлю событие для изменения заголовка сетки каталога, то магазин будет выглядеть следующим образом: (Допустим, пользователи уже были в магазине)

grid: {
    catalog: {
        headers: {
            some data
        }
    },
    users: {
        headers: {
            some other data
        }
    }
}

У меня вопрос, как мне написать модульное начальное состояние? В настоящее время у меня нет начального состояния, кроме имен сетки, потому что без них мой код не работает. Когда мне нужно установить что-то как начальное, я должен включить это в свою функцию initializeGrid, которая отправляет некоторые события, чтобы установить что-то похожее на начальное состояние.

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

Просто знайте, что я не ленив, но мое начальное состояние было бы длиной около 300 строк, и оно не было бы СУХИМ: /

Какое правильное решение?


person Hovadko    schedule 19.02.2018    source источник
comment
Пожалуйста, предоставьте код, соответствующий вашему описанию.   -  person Code-Apprentice    schedule 19.02.2018


Ответы (1)


Зачем вам нужно начальное состояние, кроме {}?

Редуктор может просто обновить состояние до необходимого значения. Если ключ существует, его значение обновляется, если не существует - добавляется. Взгляните на следующий пример:

let x = { "a" : { "b": 11 }}
let y = { ...x, "c" : { "d": 22 }}
let z = { ...y, "a": { "b": 33 }}

следующие значения (для облегчения чтения опущены ""):

x: { a: { b: 11 }
y: { a: { b: 11 }, c: { d: 22 }}
z: { a: { b: 33 }, c: { d: 22 }}
person Yossi    schedule 19.02.2018
comment
Как я уже сказал, мне нужно начальное состояние, потому что, когда я хочу что-то изменить, я должен проверить, есть ли в этом ценность. И, очевидно, я бы предпочел начальное состояние перед отправкой функции инициализации (недостаток производительности). И мой редуктор - это объект глубиной около 9 уровней, и он становится приливным: / - person Hovadko; 19.02.2018