Closed ycshill closed 6 years ago
当然可以了,自己写下代码就可以验证。多写比多看更加重要。
我写了计数的代码,连续点击2次是2啊,还有看书中的写法都是this.setState((preState) => ({users: preState.users}))
这种使用preState传参数的方式,这个很还有必要吗?
书中的举例有问题,点击两次,确实会增加2,虽然state的更新是异步的,但第二次点击时,第一次点击导致的state更新已经完成,所以会加2。
你可以用下面的代码来帮助理解state更新的异步性。handleClick是点击按钮的事件响应函数,函数内部调用了两次setState,第一次调用后,this.state的值并不是立即改变,所以第二次调用时,this.state的值还是老的值,最终两次setState的调用只会让quantity增加1。
handleClick = () => {
this.setState({
quantity : this.state.quantity + 1
})
this.setState({
quantity : this.state.quantity + 1
})
}
好的,明白了,谢谢
this.setState((preState, props) => ({counter: preState.quantity + 1}))
?