setState中的回调似乎不起作用

时间:2018-04-07 19:45:34

标签: reactjs callback setstate

我有以下内容:

addTodo() {
const text = prompt("TODO text please!")

this.setState({todos:[...this.state.todos,
              {id:id++,
               text: text,
               checked:false}]})

console.log(this.state)
}

控制台显示一个空数组,这是有意义的,因为setState是异步的。我将函数更改为使用回调:

addTodo() {
const text = prompt("TODO text please!")

this.setState(function(prevState){
              return {todos: [...prevState.todos,
                     {id: id++,
                      text: text,
                      checked: false}  ]}
})   
console.log(this.state)
}

console.log仍然显示一个空数组。不使用回调更新setState吗?

1 个答案:

答案 0 :(得分:1)

setState函数的第二个参数应该是设置state后需要调用的函数。所以你应该像第二个参数那样传递回调

this.setState({
        todos:[
               ...this.state.todos,
               {id:id++,text: text,checked:false}
             ]
        },() => {console.log(this.state)})