请老师回答代码中的问题
来源:2-9 实现 TodoList 新增删除功能(2)
weixin_慕村1291783
2021-03-10 21:22:47
import React, { Component, Fragment } from "react";
class TodoList extends Component {
constructor(props) {
super(props);
this.state = {
inputValue: "",
list: [13, 123],
};
}
render() {
return (
<Fragment>
<div>
<input
value={this.state.inputValue}
onChange={this.handleChange.bind(this)}
// onFocus={this.handleFocus.bind(this)}
></input>
<button onClick={this.handleBtn.bind(this)}>提交</button>
</div>
<ul>
{this.state.list.map((item, index) => {
return (
<li key={index} onChange={this.handleDelete.bind(this, index)}>
{item}
</li>
);
})}
</ul>
</Fragment>
);
}
handleChange(e) {
this.setState({
inputValue: e.target.value,
});
}
handleBtn() {
// console.log(13);
// let newList = this.state.list;
// this.setState({
// list: newList.push(this.state.inputValue),
// });
this.setState({
list: [...this.state.list, this.state.inputValue],
});
}
handleDelete(index) {
this.setState({
list: this.state.list.splice(index, 1), //为什么这样写就没办法删除
});
}
}
export default TodoList;
1回答
好帮手慕夭夭
2021-03-11
同学你好,代码的问题与解答如下:
1、onChange是当输入框内容改变时,才会触发的事件。即这个事件是给input绑定的,而li绑定没有办法触发。这里应该给li绑定点击事件,点击li时删除自身。
2、splice()方法返回被删掉的项目,所以下面的写法就是把删除的项又重新赋值给list了。
可以看一下效果:
添加一个项111
点击111这一项,整个列表就只有被删除的项了:
3、这里要先删除数组中的某一项,然后再把这个数组重新赋值给list。建议重新定义一个变量,然后把数据赋值给这个变量。因为splice会改变原数组,所以重新定义一个变量,在这个变量上进行操作,不会影响到原数组。
祝学习愉快~
相似问题