@eugenedrvnk

Как правильнее структурировать логику в redux?

Есть экшн для апдейта элемента :
reducers: {
  ITEM_UPDATED: (state) => {
    ...someCode...
  }
}


Потом появляется необходимость обновлять не один элемент, а несколько, какой вариант решения десь будет более правильным :

1. Создать санку для обновления нескольких элементов и оттуда вызывать поочерёдно обновление каждого :
const updateItems = () => (dispatch) => {
  const items = axios.get('...');
  items.forEach(( item ) => dispatch(ITEM_UPDATED, item))
}


2. Вынести обработчик для обновления элемента в отдельную функцию и переиспользовать его.
const handleItemUpdated = (state) => {
  ...
}

reducers: {
  ITEM_UPDATED: (state, item) => handleItemUpdated(state, item);
  ITEMS_UPDATED: (state, items) => {
    items.forEach(( item) => handleItemUpdate(state, item));
  }
}
  • Вопрос задан
  • 41 просмотр
Пригласить эксперта
Ответы на вопрос 1
Alexandroppolus
@Alexandroppolus
кодир
Правильный вариант - написать отдельную функцию handleItemsUpdate, которая должна создаст копию массива и в этой копии заменить пришедшие элементы. Либо вообще заменить мессив, если не надо мержить старое и новое.

handleItemUpdate делает замену массива ради одного элемента, и вызывать её несколько раз совсем уж неэффективно.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы