gpt4 book ai didi

javascript - React Todo 删除按钮一次删除所有列出的项目

转载 作者:行者123 更新时间:2023-11-28 17:38:09 24 4
gpt4 key购买 nike

我有2个文件

App.js

    import React, { Component } from 'react';
import './App.css';
import ToDo from './components/ToDo.js';

class App extends Component {
constructor(props) {
super(props);
this.state = {
todos: [],
newTodoDescription: ''
};
this.deleteTodo = this.deleteTodo.bind(this);
}

handleChange(e) {
this.setState({ newTodoDescription: e.target.value })
}

handleSubmit(e) {
e.preventDefault();
if (!this.state.newTodoDescription) { return }
const newTodo = { id: this.state.todos.id, description: this.state.newTodoDescription, isCompleted: false };
this.setState({ todos: [...this.state.todos, newTodo], newTodoDescription: '' });
}


toggleComplete(index) {
const todos = this.state.todos.slice();
const todo = todos[index];
todo.isCompleted = todo.isCompleted ? false : true;
this.setState({ todos: todos });
}




deleteTodo(id) {
const remainingToDos = this.state.todos.filter((todo, remainingToDos) => {
if(todo.id !== remainingToDos.id) return todo; });
this.setState({ todos: remainingToDos });
}


render() {
return (
<div className="App">
<h1>Add a ToDo!</h1>
<form onSubmit={ (e) => this.handleSubmit(e)}>
<input type="text"
value={ this.state.newTodoDescription }
onChange={ (e) => this.handleChange(e) }
/>
<input type="submit" value="Add Todo" />
</form>
<ul>
{ this.state.todos.map( (todo) =>
<ToDo key={ todo.id }
description={ todo.description }
isCompleted={ todo.isCompleted }
toggleComplete={ () => this.toggleComplete(todo) }
onDelete={ this.deleteTodo }
/>
)}

</ul>
</div>
);
}
}

export default App;

ToDo.js

      import React, { Component } from 'react';

class ToDo extends Component {
render() {
return (
<li>
<input type="checkbox" checked={ this.props.isCompleted } onChange={ this.props.toggleComplete } />
<span>{ this.props.description } {''}</span>
<button onClick={() => this.props.onDelete(this.props.id)}>Remove Todo</button>
</li>
);
}
}

export default ToDo;

我想要完成的任务:将许多待办事项添加到列表中。单击删除待办事项按钮。只有选定的待办事项才会被删除。

我对 react 非常陌生,无法弄清楚这一点。在我的 deleteToDo 方法中,我尝试过滤掉待办事项并仅保留当前的待办事项。我不清楚我是否正确使用了 .filter。

最佳答案

问题是 filter() 方法应该返回条件,而不是值:

deleteTodo(id) {
const remainingToDos = this.state.todos.filter((todo, remainingToDos) => {
return (todo.id !== remainingToDos.id)
});
this.setState({ todos: remainingToDos });
}

关于javascript - React Todo 删除按钮一次删除所有列出的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48604241/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com