reactjs - 如何在反应中删除列表中的元素?
问题描述
我正在尝试用 react 做一个简单的 toDo 应用程序。我无法删除列表中的元素。这是我的代码;第一个状态:
class AppForm extends Component {
constructor(props) {
super(props);
this.state = { items: [] , text:''};
this.onChangeHandler=this.onChangeHandler.bind(this)
this.submitHandler=this.submitHandler.bind(this)
}
//将输入值设置为状态文本
onChangeHandler = (e) => {
this.setState({
text: e.target.value
});
};
//将状态的文本项推送到项目中
submitHandler = (e) => {
e.preventDefault();
const arrayItem = {
text: this.state.text,
};
this.setState(state => ({
items: state.items.concat(arrayItem),
text: ''
}));
}
这里是问题区域。我也试过拼接,但不能。
deleteItem=(index)=>{
let todos= this.state.items.filter(todo => index !== todo.key)
this.setState({
items : todos
})
}
然后渲染..
render() {
return (
<div>
<h1>toDo App</h1>
<form onSubmit={this.submitHandler}>
<label>Type the task you want to do!</label>
<input type="text" onChange={this.onChangeHandler} value={this.state.text}/>
</form>
<ul>
{this.state.items.map((item,index) =>{
return (
<li key={index}> {item.text}
<p onClick={this.deleteItem.bind(this,index)}> X </p>
</li>
)
})}
</ul>
</div>
);
}
}
export default AppForm;
解决方案
拼接就是答案。
首先,我创建您的状态数组的副本。然后使用单击的索引将其拼接。然后用拼接的数组设置 setState。
删除项目=(索引)=>{
let todos= [...this.state.items]
todos.splice(index, 1)
this.setState({
items : todos
})
}
推荐阅读
- visual-c++ - 如何使用其他预处理器指令定义宏?
- postgresql - 忽略 Postgres 插入中不存在的列?(用于开发目的)
- javascript - JavaScript 警报未显示在浏览器页面中,但显示在屏幕右侧
- marklogic-corb - MarkLogic CORB - 如何在运行 corb 时避免超时
- matlab - matlab deploytool 生成的独立应用程序/使用 OPC 编译在主机系统中失败
- java - Spring Integration Java DSL 使用多个“.channel()”的行为
- sql - ms-access sql-query 中是否有可以提取某个字符串的函数?
- typescript - 如何使用动态字段名称创建 Formik YUP 模式?
- spring-boot - 关于将 spring-data-rest-hal-browser 依赖项添加到我的 Spring Boot 应用程序(v 2.2.4)-我的应用程序无法启动。如何修复它?
- ionic-framework - Ionic 4 拦截 android 后退按钮进行导航