setState何時同步,何時異步,為什么?


setState何時同步,何時異步,為什么

答案:在React庫控制時,異步;否則同步。

示例代碼如下:

constructor(props){
    super(porps);
    this.state = {
        name:"異步"
    }
}
test(){
    this.setState({
        name:"同步"
    })
    alert(this.state.name)
}
<TouchableOpacity onPress={()=>this.test()}>
    <Text>Button</Text>
</TouchableOpacity> 
上文TouchableOpacity中,是React庫控制,此時使用setState則為異步,alert值為"異步"。

如何才能觸發同步呢?看如下代碼:

test(){
    this.setState({
        name:"同步"
    },function(){
        alert(this.state.name)
    })
}

  此時使用回調的方式,即可觸發同步,大部分開發中用到的都是React封裝的事件,比如onChange、onClick、onTouchMove等,這些事件處理程序中的setState都是異步處理的。

 

React是怎樣控制異步和同步的呢?

在 React 的 setState 函數實現中,會根據一個變量 isBatchingUpdates 判斷是直接更新 this.state 還是放到隊列中延時更新,而 isBatchingUpdates 默認是 false,表示 setState 會同步更新 this.state;但是,有一個函數 batchedUpdates,該函數會把 isBatchingUpdates 修改為 true,而當 React 在調用事件處理函數之前就會先調用這個 batchedUpdates將isBatchingUpdates修改為true,這樣由 React 控制的事件處理過程 setState 不會同步更新 this.state。


 




 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM