在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/HTML/ react 通過setState()管理兩個子組件的展示狀態(tài),報錯。

react 通過setState()管理兩個子組件的展示狀態(tài),報錯。

切換組件報錯
情景描述:一個父組件F,和兩個子組件A,B,父組件中按鈕btn
父組件的this.state中保存了兩個與子組件展示相關(guān)的狀態(tài),isShowA:false ,isShowB:false,默認值均為false。
父組件會向A中傳一個改變state中狀態(tài)的函數(shù)fn=()=>{ this.setState({isShowA:false,isShowB:true}) }
點擊btn 會執(zhí)行this.setState({isShowA:true})相繼展示子組件A,
在A中執(zhí)行fn就會報錯。圖片描述

回答
編輯回答
糖豆豆

你的調(diào)用方式應(yīng)該就是 parent 中點擊按鈕顯示A,A中調(diào)用this.props.fn,這時候看你this.props.fn放在那里了,因為父類點擊顯示按鈕A,這時候才加載這個組件,這個組件還沒渲染出來,你就去改變他的state了,你把this.props.fn放到componentDidMount中調(diào)用就不會報錯了

其實最好是這樣寫

parent中

this.setState({
isShowA:true
},() => {

this.setState({
    isShowA: false;
})

})

,

2017年12月8日 20:58
編輯回答
久礙你

沒有具體代碼,給你一種假設(shè),在組件A中調(diào)用this.props.fn時,父組件就進入了重新渲染狀態(tài),而這時,又有一個組件調(diào)用了this.props.fn,所導致的警告。

2017年6月8日 17:27
編輯回答
雨蝶

這是警告吧……組件在卸載以后改變他的狀態(tài)就會出現(xiàn)這個東東,稍微搜一下就有的吧。

解決辦法就是在組件卸載的回調(diào)上重置setState。

componentWillUnmount()上重置手機打字有點不方便,能懂就行。

2017年1月31日 18:23