1. 程式人生 > >React組件生命周期

React組件生命周期

發生 新的 doc 即使 set 技術 接收數據 class 內部

(A)父組件和子組件:
<Header>
<Nav></Nav>
</Header>
如同html一樣 header是nav的父組件 nav是header的子組件
為子組件添加數據有兩種:傳遞屬性和傳遞狀態
<Nav data={this.props.data}></Nav>
<Nav data={this.state.data}></Nav> 特征:父組件狀態改變,子組件發生屬性改變,進入存在期
(B)React將組件看成是一個有生命的物體,具有一個周期,組件的周期分成三大周期,生命周期的三個階段,三者時間是不固定的,只是在邏輯上的分類,組件本質上是狀態機,輸入確定,輸出一定確定


具體的三大周期:
1:Mounting:已插入真實 DOM
創建期 在組件創建的時候,進入該階段
2:Updating:正在被重新渲染 (最常用的時期)
存在期 組件已經創建完成,內部的狀態,屬性發生改變的時候,會進入該階段
3Unmounting:已移出真實 DOM
銷毀期 組件從頁面中刪除的時候,進入該階段
(一)創建期:
在創建的時候,組件會進入五個階段:
1)getDefaultProps:獲取實例的默認屬性(即使沒有生成實例,組件的第一個實例被初始化CreateClass的時候調用,只調用一次,)
註意:組件還沒有創建出來我們還看不到組件內部的對象屬性
2)getInitialState:獲取實例的默認狀態(每個實例自己維護)

組件內部數據已經創建出來,我們可以訪問到組件實例化對象了
在該階段已經解析了屬性,因此,我們可以將屬性的值賦值給狀態
處理狀態的階段在處理屬性的階段後面,因此可以在狀態處理方法中處理屬性的數據
在組件外部只能為組件添加屬性數據,而不能添加狀態數據
3)componentWillMount:組件將要被構建,組件即將被裝載、渲染到頁面上(render之前最後一次修改狀態的機會)組件的虛擬dom
4)render:組件渲染輸出虛擬dom
通過return返回虛擬dom樹(必須有返回值,返回值必須是虛擬dom)
所有的dom都要在一個父dom中
組件在這裏生成虛擬的DOM節點(只能訪問this.props和this.state,不允許修改狀態和DOM輸出)

5)componentDidMount:組件已經被構建完成,可以修改DOM
組件已經創建完成虛擬dom,在這個階段可以操作真實的dom元素
註意:這五個階段所有方法的參數都是空的,並且除了第一個階段方法的作用域是構造函數,其他的作用域都是組件的實例化對象

技術分享
(二)存在期:
1)componentWillReceiveProps:組件將要接收到新的屬性的時候調用
(趕在父組件修改真正發生之前,可以修改屬性和狀態)
2)shouldComponentUpdate:組件接受到新屬性或者新狀態的時候是否更新
(可以返回false,接收數據後不更新,阻止render調用,後面的函數不會被繼續執行了
返回true,接受數據更新)
3)componentWillUpdate:組件將要被更新。
不能修改屬性和狀態
4)render:組件更新輸出虛擬dom
只能訪問this.props和this.state;只有一個頂層組件,也就是說render返回值只能是一個組件;不允許修改狀態和DOM輸出
5)componentDidUpdate: 組件已經更新完成
可以修改DOM

技術分享
(三)銷毀期:
componentWillUnmount:開發者需要來銷毀(組件真正刪除之前調用,比如計時器和事件監聽器)
作用域是實例化對象
參數是空
組件從頁面中刪除的時候出發該方法
// 過五秒鐘我們將組件刪除
setTimeout(function () {
ReactDOM.render(<div />, document.getElementById(‘app‘))
}, 1000)

React組件生命周期