1)初始化階段可以使用的函數(shù)要點(diǎn)
getDefaultProps:只調(diào)用一次,實(shí)例之間共享引用(只有組件的第一個(gè)實(shí)例初始化時(shí)才被調(diào)用,react就會(huì)這個(gè)返回的屬性保存起來,從第2個(gè)實(shí)例調(diào)用就是同樣的結(jié)果)這個(gè)函數(shù)處理的屬性。這個(gè)函數(shù)在實(shí)例化組件之前就被調(diào)用了
getInitialState:初始化每個(gè)實(shí)例特有的狀態(tài),每次實(shí)例化都會(huì)被調(diào)用,這個(gè)函數(shù)處理的狀態(tài),不同實(shí)例維護(hù)自己狀態(tài)
componentWillMount:render之前最后一次修改狀態(tài)的機(jī)會(huì)(在render就不能修改狀態(tài)了)
render:只能訪問獲取this.props和this.state這2個(gè)數(shù)據(jù)源,只有一個(gè)頂層組件(render只能返回一個(gè)組件當(dāng)然在這組件中可以包含很多子組件和代碼本質(zhì)上它是返回一個(gè)組件),不允許修改狀態(tài)和DOM輸出,當(dāng)然你如果一定這樣做的也是可以實(shí)現(xiàn)的,react是非常不推薦這樣做的(因?yàn)闀?huì)影響性能當(dāng)然邏輯也變復(fù)雜)
componentDidMount:成功render并渲染完成真實(shí)DOM之后觸發(fā),在這里可以修改真正的DOM,可能我們進(jìn)行一些特殊的操作,可以在這個(gè)函數(shù)中完成操作真正DOM
可以看到第一次實(shí)例化Test組件后 myCount 是顯示0,如果再實(shí)例化一個(gè)Test組件就會(huì)變成1,因?yàn)榈谝淮螌?shí)例化組件myCount加1了,所以第2次實(shí)例化組件就會(huì)變成1,實(shí)例之間共享引用
var count=0
var Test=React.createClass({
//初始化屬性,實(shí)例化組件只調(diào)用一次
getDefaultProps(){
console.log('getDefaultProps, 1');
return{
name:'Tom'
}
},
//實(shí)例化組件,初始化狀態(tài)
getInitialState(){
console.log('getInitialState, 2');
return{
myCount: count++,
ready: false
}
},
//組件渲染之前調(diào)用(可以做一些修改狀態(tài)工作)
componentWillMount(){
console.log('componentWillMount, 3');
this.setState({
ready: true
})
},
//渲染組件虛擬DOM
render(){
console.log('render, 4');
return(
<div style={{textAlign:'center',fontSize:28}}>
<p>{this.props.name ? this.props.name : 'world'}</p>
<p>{this.state.myCount}</p>
<p>{this.state.ready}</p>
</div>
)
},
//組件渲染完成調(diào)用該函數(shù)
componentDidMount(){
console.log('componentDidMount, 5');
// React.findDOMNode(this).append('surprise!') 拿到了React渲染該組件真實(shí)DOM節(jié)點(diǎn)
}
})