this.setState({
plateNumber: '123456',
});
console.log(this.state.plateNumber); ------>null
總會遇到給state設(shè)置值后衔肢,馬上就會用到state里面的值的情況
但是setState是異步的,就會導(dǎo)致用的時候還沒有被set成功
一奕扣、在群里偶然看到一種寫法
this.setState({
plateNumber:'123456',
}, () => {
console.log(this.state.plateNumber);
})
很是好奇令杈,竟然還可以這么寫的,馬上就在網(wǎng)上查了查攻人,666
F19F49CB-35CD-42B7-AB2E-0E6605FA33AE.png
二取试、當(dāng)然還有第二種方法,使用 InteractionManager.runAfterInteractions
this.setState({
plateNumber: '123456',
});
InteractionManager.runAfterInteractions(() => {
console.log(this.state.plateNumber);
});
setState可能會引發(fā)不必要的渲染(renders)
因為只要setState了,React就去作整個視圖的重新渲染怀吻,有可能state的值只是記錄并不在頁面上顯示瞬浓,還是會走render方法,造成不必要的渲染蓬坡,對性能有一定的影響
這個時候就會用到 shouldComponentUpdate 了
shouldComponentUpdate(nextProps, nextState) 提供兩個參數(shù)猿棉,返回true或者false
返回true,則重新渲染
返回false屑咳,則不渲染
所以就可以在這個方法中對比當(dāng)前的state的值和nextState的值萨赁,或者判斷nextState的值來返回true或者false,決定要不要重新渲染