即使最近還是有點拖延,可還是再看一些關于React的東西。看到React組件的生命周期的時候,讓我想到了Vue同樣也有生命周期,即使兩個框架在意義上有些不同,但是同樣是一個東西從創建到消亡,類比到
React的組件定義了以下三個過程:
- Mouting(裝載過程):是在組件實例在創建時和插入DOM時調用的。
- Update(更新過程):當組件的
props
和state
發生改變時,重新渲染頁面是調用的。 - Unmounting(卸載過程):組件從DOM中移動時調用的。
說了這些可能對于沒有接觸過React的人還是蠻陌生的,還是直接說每一個跟過程中有哪些方法可以調用。
Mounting
constructor
這個方法主要是為組件初始化state
和綁定函數的this
環境用的。
componentWillMount
這個方法是在render()
之前調用的,在這個函數當中不能對組件的state
進行設置(就是this.setState
),因為這時候即使修改了狀態也不會觸發,因為一切都太晚了,所以想在這個方法做的事情都可以提到constructor
里面。
This is the only lifecycle hook called on server rendering. Generally, we recommend using the constructor() instead.
render
這是一個最重要的函數,每一個組件這是一個必須要有的函數。當這個函數被調用的時候,他會根據props
和state
的值返回一個React的組件,這個組件可以是原生的DOm組件也可以是你自己定義的組件;當然你也可以返回null
和false
,這樣告訴React這次組件并沒有什么東西去渲染。
render
函數是一個純函數,所以在這個函數中不用修改組件的狀態
componentDidMount
該函數并不是render
運行完就立刻執行的,而是組件已經裝載(Mounted)在DOM的時候,在這里就可以從遠程加載數據,也可以發起網絡請求(如AJAX)。這里this.setState
是會觸發重繪(re-rendering)。
Update
componentWillReceiveProps
在父組件的render函數調用的時候,不論父組件傳遞給子組件的props
值有沒有發生變化,都會觸發子組件的componentWillReceiveProps
的方法。而且通過this.setState
方法并不會調用該函數。
shouldComponentUpdate
這個函數在整個組件的生命周期中也是尤為重要。因為這個函數決定一個組件什么時候不需要渲染。該函數的會接受新的props
值和state
值,而觸發,默認返回是true
值,告訴React繼續渲染該組件,如果返回flase
值則是終止后面的渲染。
其實根據上述解釋并不會認為這是一個重要的函數!其實React主要火的原因是,會有對每一次的DOM渲染有一個diff
算法,找出不同的節點信息再去渲染那一個節點,而這一個函數就是為了提高整體性能的作用。
componentWillUpdate
這個函數當中不能調用this.setState
方法,如果你想更新狀態讓prop改變的話,還是使用componentWillReceiveProps
函數。該函數不會在最初的render函數中調用。
componentDidUpdate
這里可以操作DOM樹了,因為組件已經完成了更新。這里也可以進行網絡請求,也可以比較本次和上一次的prop
值。該函數不會在最初的render函數中調用。
Unmounting
componentWillUnmount
當React組件從DOM樹上移除的時候調用。該函數的工作主要是和componentDidMount
有關。
以上就是對React生命周期函數的稍許介紹,有疑問或理解偏頗的地方歡迎指出。