Лично мне нравится использовать метод filter
для удаления элементов из состояния и я хочу предложить альтернативное решение.Как мы пытались объяснить в комментариях и ответе @Thiago Loddi, вы не должны изменять свое состояние таким образом.
Для массивов используйте методы, такие как map
, filter
, slice
, concat
, чтобы создавать новые в соответствии с ситуацией.Вы также можете использовать синтаксис распространения для поверхностного копирования вашего массива.Затем установите свое состояние, используя этот новый.Для объектов вы можете использовать Object.assign
или распространять синтаксис снова для создания новых.
Предупреждение, синтаксис распространения и Object.assign
создает мелкие копии.Если вы изменяете вложенное свойство этого вновь созданного объекта, вы изменяете исходное свойство.Просто имейте в виду, что для этой ситуации вам нужна глубокая копия, или вам следует снова изменить объект, не изменяя его каким-либо образом.
Вот альтернативное решение с filter
.
removeItem = itemIndex => {
const newRents = this.state.rents.filter((_, index) => index !== itemIndex);
this.setState({ rents: newRents });
};
Если вы хотите зарегистрировать это новое состояние, вы можете использовать обратный вызов на setState
, но лично мне нравится регистрировать состояние в методе render
.Итак, вот еще одна альтернатива:)
render() {
console.log( this.state.rents );
...
}