我正在学习ReactJS,并且正在开发一个Todo应用程序。
在我的页面中,我有一个任务文本框和一个按钮来将任务添加到项数组中。我面临一个问题,当我点击Add任务按钮来添加我的第一个任务时,它似乎不是第一次添加它,然后当我添加我的第二个任务时,第一个任务被添加,而不是第二个任务,等等。我使用console.log(this.state.items)来知道我有哪些项目,问题是下一次添加前一项。
我只是学习反应,而不是一个有经验的人在技能,会真的感谢任何帮助和解释的问题,我面临的问题,我如何解决它。
下面是我到目前为止编写的代码。
import React, {Component} from 'react';
class TodoList extends Component{
addTask(event){
//Get task Value
var task = this.refs.name.value;
if(task!==""){
var newItem = {
text : task,
key : Date.now()
}
this.setState({
items : this.state.items.concat(newItem)
});
this.refs.name.value = ""; //Blank out the task input box
}
console.log(this.state.items);
}
constructor(props){
super(props);
this.state = {
items : []
};
this.addTask = this.addTask.bind(this);
}
render(){
return(
<div className = "todolistMain">
<div className="header">
<form>
<input placeholder="Enter Task" id="name" ref = "name"></input>
<button type="button" onClick={this.addTask}>Add Task</button>
</form>
</div>
</div>
);
}
}
export default TodoList;发布于 2019-01-14 12:56:27
您正在看到console.log(this.state.items)显示以前的状态,因为setState是一个异步调用。
问题:-控制台日志是在执行setState之前打印的。
解决方案:-使用回调,当状态更改时要执行某些操作/控制台日志时,使用Callbacks。
更新代码:-
this.setState({
items: this.state.items.concat(newItem)
},()=>{
this.refs.name.value = "";
console.log(this.state.items);
});希望这能帮上忙
干杯!!
https://stackoverflow.com/questions/54181829
复制相似问题