Как правильно использовать редьюсеры в redux

127
08 июня 2019, 16:10

Вот редьюсер через который я перезаписываю стор:

export default function reducer(state, action) {
  if (action.type === 'ADD_TASK') {
    let newTask = new TaskItem();
    let output = {
      data: {
        ongoing: [
          newTask,
          ...state.data.ongoing,
        ],
        completed: [
          ...state.data.completed,
        ],
      },
      settings: state.settings,
    };
    console.log(state);
    return output;
  }
  return state;
}

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

Как правильно обновлять данные в сторе?

Answer 1

Никакой логики не должно быть в редюсере. Редюсер это чистая функция без сайд эффектов только положить, достать, удалить. Всю логику нужно выносить в другое место, напрмер в middelware такие как redux-saga. Для сложных структур с большой вложенностью можно использовать вспомогательные библиотеки immutable.js, reselect, normalizr. Это большая и очень веселая тема )

import { ADD_TASK, TASK_LOADING } from '../constants';
const initialState = {
  items: [],
  errors: [],
  isLoading: false,
};
export default (state = initialState, action) => {
  switch (action.type) {
    case ADD_TASK:
      return {
        ...state,
        items: [action.item, ...state.items],
        isLoading: false,
      };
    case TASK_LOADING:
      return {
        ...state,
        isLoading: true,
      };
    /* another cases... */
    default:
      return state;
  }
};
READ ALSO
Сортировка, метод sort(fn)

Сортировка, метод sort(fn)

Объясните почему получилось от меньшего к большему ?

92
treeview manager компонент

treeview manager компонент

не могу найти treeview компонент которого использовать в другой модели yii2 То есть при создании записи в другой модели (таблице) выбираю treeview компонента...

116
в обратном порядке расположить слово

в обратном порядке расположить слово

Когда добавляешь цифры в массив он переворачивает, а добавляешь строку не переворачивает хотя видит ее длину

125
Puppeteer в exe файл! zeit/pkg

Puppeteer в exe файл! zeit/pkg

Нужно puppeteer скомпилировать в exe файл! Пробую zeit/pkg но выбивает всегда ошибку http://prntscrcom/lthfx5 Искал проблему на github, все перепробовал - не помогло...

113