Почему не удаляется item?

Добрый день! Подскажите, почему не удаляется item, а добавляется?
class App extends Component {
	state = {
		todoData:[
			{ label: 'Drink Coffee', important: false, id: 1 },
			{ label: 'Make Awesome App', important: true, id: 2 },
			{ label: 'Have a lunch', important: false, id: 3 }
		]
	}
	
	deleteItem=(id)=>{
		this.setState(({todoData})=>{
			const idx = todoData.findIndex((el)=>el.id===id)
			const newArray = [...todoData.slice(0,idx),...todoData.slice((idx+1))];
			return {
				todoData:newArray
			}
		})
	}
	render(){		
		return (
    <div className="todo-app">
      <AppHeader toDo={1} done={3} />
      <div className="top-panel d-flex">
        <SearchPanel />
        <ItemStatusFilter />
      </div>
      <TodoList todos={this.state.todoData} onDeleted={this.deleteItem}  />
    </div>
  );
	}  
}
ReactDOM.render(<App />,
  document.getElementById('root'));
  • Вопрос задан
  • 161 просмотр
Пригласить эксперта
Ответы на вопрос 1
0xD34F
@0xD34F Куратор тега React
почему не удаляется item, а добавляется?

ДобавляЕтся - это как? Я бы поверил в "добавляЮтся" - если в deleteItem передать несуществующий id, тогда индекс элемента будет равен -1, и новый массив окажется копией исходного без последнего элемента (slice(0, -1)) плюс полная копия (slice(0)).

Кстати, а что в deleteItem передаётся? Непонятно, как этот метод используется - код компонента TodoList вы почему-то не показали (как и код компонента, представляющего отдельный todo, если таковой у вас имеется).

А вообще, удаление делается не так, есть же filter:

deleteItem = id => {
  this.setState(({ todoData }) => ({
    todoData: todoData.filter(n => n.id !== id),
  }));
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы