2 回答

TA貢獻(xiàn)2036條經(jīng)驗(yàn) 獲得超8個(gè)贊
首先恭喜您已經(jīng)解決了!在忙著重構(gòu)react沒來得及看,真是抱歉!我就說說原因吧!
一般原因
這種錯(cuò)誤一般出現(xiàn)在我們已經(jīng)從DOM中移除了react組件,這時(shí)才調(diào)用setState改變組件的狀態(tài)
。
舉個(gè)比較常見的例子:
我們?cè)赾omponentWillMount中發(fā)送異步請(qǐng)求,并且我們調(diào)用setState根據(jù)響應(yīng)數(shù)據(jù)改變組件的狀態(tài),然后請(qǐng)求還未完成,我們改變了頁面也就是移除該組件,就會(huì)報(bào)這個(gè)錯(cuò)誤。這是因?yàn)殡m然組件已經(jīng)被移除,但是請(qǐng)求還在執(zhí)行,所以會(huì)報(bào)setState() on an unmounted component的錯(cuò)誤
。
如何解決?
我們只要在react組件被移除之前終止setState操作就可以了。
業(yè)務(wù)例子
定時(shí)器,在生命周期函數(shù)componentWillUnmount把定時(shí)器清除掉。
異步請(qǐng)求,用
abort()
或包裹Promise
等 ,請(qǐng)求方式不一樣,處理方法也不同!
添加回答
舉報(bào)