Добрый день!
Работаю сейчас с Redux и не получается правильно удалить нужный элемент из массива.
Допустим, у меня есть массив, который хранится в store. Этот массив map'ом выводится в виде списка. Каждый элемент списка имеет кнопку удаления, на который я повесил обработчик и колбэком передаю его индекс
removeStudent(index) {
this.props.onRemoveStudent(index);
}
render() {
return (
{this.props.studentsStore.studentsList.map((item, index) =>
<tr className="itemStudent" key={index}>
<td><input type="text" defaultValue={item.name} /></td>
<td><input type="text" defaultValue={item.surname} /></td>
<td>{item.gender}</td>
<td><input type="text" defaultValue={item.age} /></td>
<td>{item.isMarried + ''}</td>
<td><button id="remove" onClick={() => this.removeStudent(index)}>X</button></td>
</tr>
)}
)
}
А вот написать нужный редьюсер не получается
С добавлением понятно, там просто вставить в конец массива еще один элемент. А вот удалить...
export default connect(
state => ({
studentsStore: state
}),
dispatch => ({
onRemoveStudent: (index) => {
dispatch({ type: 'REMOVE_STUDENT', payload: index })
}
})
В общем, вот мой редьюсер
export default function studentsList(state = initialState, action) {
if(action.type === 'ADD_STUDENT') {
return [
...state,
action.payload
]
}
if(action.type === 'REMOVE_STUDENT') {
let newArr = state;
newArr.splice(action.payload, 1);
return newArr.filter(element => element !== action.payload);
}
return state;
}
Сейчас удаляется только последний элемент, вне зависимости от того, на каком элементе был клик
Подскажите, пожалуйста