Удалить текущий элемент массива из массива Redux - PullRequest
0 голосов
/ 28 сентября 2018

Вот мой редуктор

const initialState = {
  pros: [''],
}

export const rootReducer = (state = initialState, action) => {
  switch (action.type) {
    case ACTION_ADD_PROS:
      return {
          ...state.pros,
          pros: [...state.pros,  action.payload]
        }

    case ACTION_CHANGE_PROS:
      return update(state, { 
        pros: { 
          [action.index]: {
            $set: action.payload
          }}
      });

    case ACTION_REMOVE_PROS:   

   ???


      return x
    default:
  }
  return state;
};

Может ли кто-нибудь помочь мне, как я могу удалить текущий элемент из массива?Я пробовал много способов, но я не понимаю, в чем здесь проблема, также я использовал response-addons-update для магазина обновлений

Ответы [ 3 ]

0 голосов
/ 28 сентября 2018

Вместо splice ing, просто slice массив перед индексом, после индекса и возврат объединенного массива.

Он сохранит исходный массив без изменений

  [
    ...state.pros.slice(0, action.index),
    ...state.pros.slice(action.index + 1)
  ]
0 голосов
/ 28 сентября 2018

Я думаю, что Array.prototype.filter было бы наиболее простым и читаемым решением для удаления элемента из массива:

return {
  pros: state.filter((item, index) => index !== action.index)
}
0 голосов
/ 28 сентября 2018

я думаю, что это должно сработать (не проверял)

вам нужно создать копию массива, удалить элемент и затем присвоить новый массив состоянию

const initialState = {
pros: [''],
}

export const rootReducer = (state = initialState, action) => {
switch (action.type) {
    case ACTION_ADD_PROS:
    return {
        ...state.pros,
        pros: [...state.pros,  action.payload]
        }

    case ACTION_CHANGE_PROS:
    return update(state, { 
        pros: { 
        [action.index]: {
            $set: action.payload
        }}
    });

    case ACTION_REMOVE_PROS:
    // make a copy of the array
    const newArr = state.pros
    // remove item at index 4
    newArr.splice(newArr.indexOf(action.payload), 1)   

    return update(state, {
           pros: [...newArr]
    })

   //this is the old code that is incorrect
   /* return update(state, { 
        pros: { 
        [action.index]: {
            $set: newArr
        }}
    });/*


    return x
    default:
}
return state;
};

для получения дополнительной информации о array.splice ()

Помните: НИКОГДА НЕ РЕДАКТИРУЙТЕ СОСТОЯНИЕ ПРЯМО.состояние должно быть неизменнымне хочу редактировать копию массива, а затем просто назначить меньший массив

...