setState 中的回调似乎不起作用

callback in setState doesn't seem to work

我有以下内容:

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吗?

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

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