關(guān)于setState異步同步的問(wèn)題,以官方文件中較精確的說(shuō)法:'它不是保證同步的"。
那么什么時(shí)候異步,什么時(shí)候同步?
答案是在React庫(kù)控制時(shí),異步;否則同步。
如:setState方法寫(xiě)在
constructor(props){
super(porps);
this.state = {
name:"alpha"
}
}
test(){
this.setState({
name:"beta"
})
alert(this.state.name)
}
<TouchableOpacity onPress={()=>this.text()}>
<Text>Button</Text>
</TouchableOpacity>
上文TouchableOpacity中,是React庫(kù)控制,則為異步,alert值為"alpha"。
那么,如何alert出"beta"呢?
方法1
使用callback回調(diào)函數(shù):
test(){
this.setState({
name:"beta"
},function(){
alert(this.state.name)
})
}
方法2
async/await實(shí)現(xiàn)異步轉(zhuǎn)同步
constructor(props){
super(porps);
this.state = {
name:"alpha"
}
}
setStateAsync(state){
return new Promise((resolve,reject)=>{
this.setState(state)
})
}
async componentDidMount(){
await this.setStateAsync({name:"beta"})
console.log(this.state.name)
}