react生命周期分為3個階段
1.初始化(實例化階段,只執行一次)
2.更新(存在階段,是可以反復執行的)
3.銷毀(銷毀階段,只執行一次)
初始化(實例化階段,只執行一次)
1.getDefaultProps()(es5)
設置默認props,也可以設置props的默認屬性
2.getInitialState()(es5)
es5的鉤子函數,es6沒有這個鉤子函數,在es6中使用class創建 (class 組件名 extends React.Component)在constructor中設置this.state={里面設置初始化的狀態}
3.componentWillmount()
在渲染DOm之前調用一次,也是最后一次機會可以更新state的時刻(只調用一次)
4.render()
創建虛擬DOM,通過DiFF算法,更新DOM樹。只能通過this.state或this.props訪問數據
不能修改DOM的輸出,不能修改組件的狀態,可以返回null,false,或者任意一個組件,
只能有一個頂級組件
5.componentDidMount()
在更新DOM樹之后調用一次,可以通過this.getDOMNode()獲取真實的DOM元素。
.更新(存在階段,是可以反復執行的)
6.componentWillReceiveProps()
初始化時不調用,組件接受新的Props時調用,在這里可以更新組件的props和state
7.shouldComponentUpdata()
當props或state更新時,判斷是否渲染新的props和state,返回false時,下面的周期不在執行,通常不需要使用,避免BUG的出現,在出現應用的瓶頸或者需要優化時,可以進行適當的應用。
8.render()同初始化時一樣
9.componentDidUpdata()
完成新的渲染時調用,在這里可以獲得更新后的DOM元素
銷毀(銷毀階段,只執行一次)
10.componentUnmount()
組件被銷毀之后調用,可以做一些清理,在componentDidMount()添加的任務都需要在這里撤銷,比如一些定時器或者創建的監聽器
當調用了setState時發生什么事?
當調用setState后,會把當前傳入的參數與當前狀態合并,然后觸發調和過程,通過調和過程,react會以高效的方式構建DOM樹,并且重新渲染整個UI界面,在react渲染DOM樹后,react會自動計算出新的DOM樹和老的DOM樹之見的差異,根據差異以最小化進行渲染。react能精準的判斷出那些發生了變化并來應對這些變化,從而達到按需更新,而不是全部更新。
在react中Element和Component有什么區別?
React Element是描述你在屏幕上看到的數據結構,是對UI對象的表述,典型的React Element就是通過典型的JSX構建的代碼片段被轉化成cerateElement的調用組合。React Component則是接受參數輸入,返回React Element的的函數或者類
在什么情況下你會優先選擇Class Component,而不是Function Component(函數式組件)
在組件需要包含生命周期或者狀態時,我們需要使用Class Component,否則使用Function Component
react中refs的作用是什么?
它允許你直接訪問DOM元素或實例,為了使用它們,你可以直接在組件中添加一個ref的屬性,該屬性的值是一個回調函數,它將接受底層的DOM元素或者已掛載的實例,作為第一個參數。
react中keys是什么,為什么要使用它們?
key是獨一無二的,它主要用來跟蹤哪些項目更改,刪除,添加