
當我們按下按鈕 列印n的時候

視圖層的n變成了3 而輸出卻并沒有變 setState的物件 是異步的 setState呼叫之后,并不會立即去修改state的值,也不會立即去更新dom 他的執行順序是在鉤子函式componentDidUpdate前的
當我們給setState添加第二個引數 一個回呼函式之后再列印n


此時獲得的n是最新狀態的
他還有另一種寫法
this.setState((上一狀態) => {
return 新狀態
}[,回呼函式])


列印獲得的n都為最新狀態
但是這種語法雖然可以獲得最新的狀態 但是依舊是異步的
setState本身并不是一個異步方法,其之所以會表現出一種異步的形式,是因為react框架本身的一個性能優化機制
在React中,如果是由React引發的事件處理(比如通過onClick引發的事件處理),呼叫 setState 不會同步更新 this.state,原生事件處理函式,setTimeout,setInterval的setState呼叫會同步執行this.state,
setState是同步的方法,但是react為了性能優化,所以setState在react的事件中表現得像異步,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/355350.html
標籤:其他
