reactjs - 我将如何在 React 的 Todolist 中完成列表项目?
问题描述
这是我的代码,我想在其中删除已完成的列表项。
export default class Todo extends Component{
constructor(){
super();
this.state={
text:"",
todoList:[],
strikeThrough:[]
}
}
我只是对如何在反应组件中使用 line through 的 css 属性以及如何更新该特定索引感到困惑。
doneTodo=index => ()=>{
const list3=[...this.state.todoList];
this.setState({todoList:list3})
};
render() {
let {text,todoList}=this.state;
return(
<div className="App-header">
<div className="childApp">
<h1 style={{textAlign: "center"}}>To-Do APP!</h1>
<h3>You have {todoList.length} Todos</h3>
<br/>
<ul className="list-group">
{todoList.map((val,index) => {
return (
<div className="mytodo">
<li className="list-group-item">
<span classname="spname"> {val} </span>
<button type="button" onClick={this.doneTodo} className="btn btn-default btn-s pull-right remove-item">Done</button>
<button key={index} id={index} class="btn btn-default btn-s pull-right remove-item" onClick={this.delTodo(index)}>
<span className="glyphicon glyphicon-remove"></span>
</button>
</li>
解决方案
最简单的方法(不是唯一的方法),以及我推荐你的方法,因为你看起来像一个反应初学者是这样的:
由于您似乎已经mytodo
为所有待办事项创建了一个类,请将以下 CSS 选择器添加到您的样式表中:
.mytodo .done {
text-decoration: line-through;
}
现在您需要做的是将课程添加done
到您已完成的所有待办事项中。
为此,我建议您稍微更改一下代码结构,主要是通过向isDone
您的 todo 对象添加一个属性而不是使用两个数组。
现在您需要像这样有条件地渲染 css 类:
<div className=`myTodo ${todo.isDone ? 'done' : ''}`>
...
</div>
现在唯一要做的就是切换isDone
每个 todo 对象的属性。为此,您可以编写如下函数:
setDone = todoId => {
this.setState(prevState => ({
todoList: prevState.todoList.map(el => (el.id === todoId ? {...el, isDone: true} : el))
}));
}
最后在点击时调用函数并传递 id。也许是这样的:
<button onClick={() => setDone(todo.id)}>set done</button>
推荐阅读
- qt - 在 .pro 文件中添加多个库的问题 - qmake
- r - 使用显示 NA 值的 tab_cells 在 R 中创建交叉表
- css - 如何在 Gmail 附件中实现“悬停”?
- julia - 当您首先不知道数组的尺寸时如何在 Julia 中初始化数组
- list - 如何从列表列表的某些元素之间的组合生成多个列表(在java或C中)
- android - 出现 qr scannig Fragment 但未进行扫描
- wordpress - 使用 Wordpress 身份验证解析平台
- android - AlarmManager setRepeating() 在不正确的时间触发
- python-3.x - 如何编码具有高基数的列?
- python - 如何纠正错误:迭代器应该返回字符串,而不是字节(您是否以文本模式打开文件?)在 csv e netcdf 文件中?