reactjs - React 中的 Todo 应用程序 - 想要添加按钮,单击该按钮会删除整个待办事项列表
问题描述
我在 React 中创建了一个 ToDo 应用程序。我想添加一个按钮,当我点击它时会删除整个待办事项列表并向用户显示消息“你没有任何待办事项”。我正在尝试添加功能,但似乎找不到完美的方法。
我已经给所有的 Todos 一个唯一的 id,我也获取了这些 id,但不知道如何使用它们从一个按钮中删除所有的 Todos。帮我。提前致谢
这是我的主要组件App.js
import React, { Component } from 'react';
import PrintTodo from "./printtodo"
import Addtodo from "./addTodo"
class App extends Component {
state = {
todos: [
{id:1, content:"Buy Tomatoes"},
]
}
deleteTodo = (id) => {
const todos = this.state.todos.filter(todo => {
return todo.id !== id
})
this.setState({
todos
})
}
addTodo = (todo) => {
todo.id = Math.random()
// console.log(todo)
let todos = [...this.state.todos, todo]
this.setState({
todos
})
}
button = () => {
// console.log(this.state)
const allTodos = this.state.todos.filter(todo => {
console.log(todo)
})
// const id = 10;
// console.log(allTodos)
// allTodos.forEach(todo => {
// // console.log(todo)
// const arr = new Array(todo)
// arr.pop()
// })
}
render(){
// console.log(this.state)
return (
<div className="App">
<div className="container">
<header className="text-center text-light my-4">
<h1>ToDo - List</h1>
<form>
<input type="text" name="search" placeholder="Search ToDo's" className="form-control m-auto"/>
</form>
</header>
<PrintTodo addTodo={this.state.todos} deleteTodo={this.deleteTodo}/>
<Addtodo addTodo={this.addTodo} allTodos={this.button}/>
</div>
</div>
)
}
}
export default App;
PrintTodo 组件
import React from 'react'
const printTodo = ({addTodo, deleteTodo, }) => {
// console.log(addTodo)
const todoList = addTodo.length ? (
addTodo.map(todo => {
return (
<ul className="list-group todos mx-auto text-light" key={todo.id}>
<li className="list-group-item d-flex justify-content-between align-items-center">
<span>{todo.content}</span>
<i className="far fa-trash-alt delete" onClick={()=>{deleteTodo(todo.id)}}></i>
</li>
</ul>
)
})
) : (
<p className="text-center text-light">You don't have any ToDo's</p>
)
return (
<div>
{todoList}
</div>
)
}
export default printTodo
AddTodo 组件
import React, { Component } from 'react'
class Addtodo extends Component{
state = {
content: ""
}
handleChange = (e) => {
this.setState({
content: e.target.value
})
}
handleSubmit = (e) => {
e.preventDefault()
this.props.addTodo(this.state)
this.setState({
content: ""
})
}
render(){
// console.log(this.props.allTodos)
return(
<div>
<form className="text-center my-4 add text-light" onSubmit={this.handleSubmit}>
<label htmlFor="add">Add a New ToDo</label>
<input onChange={this.handleChange} type="text" name="add" id="add" className="form-control m-auto" value={this.state.content}/>
</form>
<button onClick={() => {this.props.allTodos()}}>Clear Whole List</button>
</div>
)
}
}
export default Addtodo
解决方案
在您的 app.js 中,将此作为您的按钮组件。
button = () => {
this.setState({todos: []})
})
将待办事项重置为空数组将删除所有待办事项。
推荐阅读
- javascript - Google Apps 脚本:类表示法和新对象
- python - 如何从python中的字典中获取值?
- reactjs - 如何在同一个根域下创建 2 个 PWA
- javascript - 编写一个 JavaScript 控制台程序来读取输入文件并将句子转换为首字母缩写词
- javascript - 如何在 CKEditor 4 中设置默认字体
- c++ - 使用动态编程的具有分区约束的 Max Sum 子数组
- javascript - 如何从阴影根元素中获取文本?
- java - [3.1.0]使用自定义处理程序发布 API 时出错
- reactjs - Reactjs 如何检查状态常量以确定它是否已初始化?(以避免错误,如果它没有)
- c# - 超时后以 CPU 友好的方式从字典中删除项目