Редукс редуктор - изменение массива с помощью forEach - PullRequest
1 голос
/ 08 мая 2019

Возникла небольшая проблема с извлечением и основанным на ответе обновлением массива в моем состоянии в Redux.

Сначала я выполнил обновление всего массива с помощью forEach в действиях (на основе моего начального объекта состояния) и отправилэто готово к редуктору, это сработало.Просто.

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

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

Может кто-нибудь подсказать мне, что пошло не так и как правильно сделать это в редукторе?

Оба подхода не работали:

export const handleMusicCards = (state = musicState, action = {}) => {switch (action.type) {{1013 *

case REQUEST_MUSIC_SUCCESS:
  return Object.assign({}, state, {
    musicStateItemList: state.musicStateItemList
      .forEach((el, i) => {
        el.track = action.payload.message.body.track_list[i].track.track_name;
        el.album = action.payload.body.track_list[i].track.album_name;
        el.artist = action.payload.body.track_list[i].track.artist_name;
        el.id = action.payload.body.track_list[i].track.track_id;
        el.favClicked = false;
        el.addedToFav = false;
      }),
    isLoading: false
  });

}}

export const handleMusicCards = (state = musicState, action = {}) => {switch (action.type) {

case REQUEST_MUSIC_SUCCESS:
  return Object.assign({}, state, {
    musicStateItemList: state.musicStateItemList
      .forEach((el, i) => {
        return {
          ...el,
          track: action.payload.message.body.track_list[i].track.track_name,
          album: action.payload.message.body.track_list[i].track.album_name,
          artist: action.payload.message.body.track_list[i].track.artist_name,
          id: action.payload.message.body.track_list[i].track.track_id,
          favClicked: false,
          addedToFav: false,
        }
      }),
    isLoading: false
  });

}}

Ответы [ 2 ]

1 голос
/ 08 мая 2019

Теперь решено. Очень глупая ошибка, неправильный регистр в выражении switch.

0 голосов
/ 08 мая 2019

Я не уверен после прочтения, где происходит сбой. Еще немного о редуксных соглашениях.

Объекты действий предназначены только для описания того, какие изменения следует внести в состояние. Редуктор - это то место, где состояние действительно должно быть изменено. В redux вы никогда не хотите изменять объект состояния, вместо этого вы хотите скопировать его и вернуть новый объект с изменениями, как описано в объектах действия.

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

const reducer = (state, action) => {
    switch (action.type) {
        case NEW_RECORD_SUBMIT :
            return {
                ...state,
                newRecordStatus: action.status,
            };
    default :
          return state;
  }
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...