首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Reactjs ToDo列表setState

Reactjs ToDo列表setState
EN

Stack Overflow用户
提问于 2019-01-14 12:46:02
回答 1查看 624关注 0票数 0

我正在学习ReactJS,并且正在开发一个Todo应用程序。

在我的页面中,我有一个任务文本框和一个按钮来将任务添加到项数组中。我面临一个问题,当我点击Add任务按钮来添加我的第一个任务时,它似乎不是第一次添加它,然后当我添加我的第二个任务时,第一个任务被添加,而不是第二个任务,等等。我使用console.log(this.state.items)来知道我有哪些项目,问题是下一次添加前一项。

我只是学习反应,而不是一个有经验的人在技能,会真的感谢任何帮助和解释的问题,我面临的问题,我如何解决它。

下面是我到目前为止编写的代码。

代码语言:javascript
复制
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;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-14 12:56:27

您正在看到console.log(this.state.items)显示以前的状态,因为setState是一个异步调用。

问题:-控制台日志是在执行setState之前打印的。

解决方案:-使用回调,当状态更改时要执行某些操作/控制台日志时,使用Callbacks。

更新代码:-

代码语言:javascript
复制
this.setState({
        items: this.state.items.concat(newItem)
      },()=>{
        this.refs.name.value = "";
        console.log(this.state.items);
      });

希望这能帮上忙

干杯!!

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54181829

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档