Изменение типа объекта действия в функции редуктора - PullRequest
0 голосов
/ 24 апреля 2020

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

простой пример, показывающий, что я имею в виду:

const lineReducer = (state = [], action) => {
    switch (action.type) {
        case 'ADD_LINE':
            action.type = 'INC';
            return [...state,action.payload];
        case 'UPDATE_LINE':
            return state.map(vehicle => vehicle);
        case 'TAKE_VEHICLE_IN_LINE':
            action.type = 'DEC';
            return state.filter(vehicle => vehicle.id !== action.payload);
        default:
            return state;
    }
}
const lineStatsReducer = (state = 0, action) => {
    switch (action.type) {
        case 'INC':
            return state + 1;
        case 'DEC':
            return state - 1;
        default:
            return state;
    }
}
compineReducer({
    line: lineReducer,
    stats: lineStatsReducer
});

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

1 Ответ

0 голосов
/ 24 апреля 2020

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

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

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