Вот мой редуктор
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; };
Может ли кто-нибудь помочь мне, как удалить текущий элемент из массива? Я пробовал много способов, но я не понимаю, в чем проблема здесь, также я использовал дополнения-дополнения для обновления хранилища
Всего 3 ответа
Я думаю, что Array.prototype.filter было бы самым простым и понятным решением для удаления элемента из массива:
return {
pros: state.filter((item, index) => index !== action.index)
}
я думаю, что это должно сделать трюк (не проверено)
вам нужно создать копию массива, удалить элемент, а затем назначить новый массив состоянию
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 ()
Помните: НИКОГДА НЕ ПРОВЕРЬТЕ ГОСУДАРСТВО. государство должно быть неизменным
edit: метод возврата был неправильным, попробуйте это изменить: как из вашего комментария, я исправил newArr и теперь он должен удалить «текущее» значение из массива, в основном вы не хотите редактировать копию массива, а затем просто назначьте меньший массив
Вместо splice
, просто slice
массив перед индексом, после индекса, и верните объединенный массив.
Он сохранил бы оригинальный массив нетронутым
[
...state.pros.slice(0, action.index),
...state.pros.slice(action.index + 1)
]