轉載自:https://segmentfault.com/q/1010000008133309/a-1020000008135702
這與React組件的生命周期有關,組件掛載時有關的生命周期有以下幾個:
-
constructor()
-
componentWillMount()
-
render()
-
componentDidMount()
上面這些方法的調用是有次序的,由上而下,也就是當說如果你要獲取外部數據並加載到組件上,只能在組件"已經"掛載到真實的網頁上才能作這事情,其它情況你是加載不到組件的。
componentDidMount方法中的代碼,是在組件已經完全掛載到網頁上才會調用被執行,所以可以保證數據的加載。此外,在這方法中調用setState方法,會觸發重渲染。所以,官方設計這個方法就是用來加載外部數據用的,或處理其他的副作用代碼。
constructor被調用是在組件准備要掛載的最一開始,所以此時組件尚未掛載到網頁上。
componentWillMount方法的調用在constructor之后,在render之前,在這方法里的代碼調用setState方法不會觸發重渲染,所以它一般不會用來作加載數據之用,它也很少被使用到。
一般的從后台(服務器)獲取的數據,都會與組件上要用的數據加載有關,所以都在componentDidMount方法里面作。雖然與組件上的數據無關的加載,也可以在constructor里作,但constructor是作組件state初紿化工作,並不是設計來作加載數據這工作的,所以所有有副作用的代碼都會集中在componentDidMount方法里。