React生命週期詳解
這篇文章我們將討論React元件的生命週期
一、元件的生命週期分成三個狀態:
- Mounting:已掛載到真實DOM
- Updating:正在重新渲染
- Unmounting:已移出真實DOM
二、生命週期方法:
Mounting
- construtor() 元件的建構函式在掛載之前呼叫
- conponentWillMount() 在渲染前呼叫
- render() 元件初次渲染
- componentDidMount() 第一次渲染後呼叫,可以通過findDOMNode() 來進行訪問。如果你想和其他js框架一起使用,可以在這個方法呼叫setTimeout,setInerval()或者傳送AJAX請求等操作(防止非同步操作阻塞UI)
Updating
- componentWillRecevieProps() 元件接收到一個新的props時被呼叫。這個方法在初始化render時不會呼叫
- shouldComponentUpdate() 返回一個布林值。在元件接收到新的props或者state時被呼叫。初始化時不會呼叫
- componentWillUpdate() 元件接收到新的props或者state但還沒有render時被呼叫。初始化時不會呼叫
- render() 重新渲染
- componentDidUpdate() 在元件完成更新後立即呼叫。初始化時不會呼叫
Unmounting
- componentWillUnmount() 元件從DOM中移出的時候立即呼叫
三、在渲染前可以使用的部分API
- getDefaultProps 設定預設的prop值
- getInitialState 設定初始state
四、Demo
demo1
<script type="text/jsx">
var MessageBox = React.createClass({
getDefaultProps:function(){
console.log('getDefaultProps');
return {};
},
getInitialState:function(){
console.log('getInitialState');
return {
count: 0,
}
},
componentWillMount:function(){
console.log('componentWillMount');
},
componentDidMount:function(){
console.log('componentDidMount')
var self = this;
this.timer = setInterval(function(){
self.setState({
count: self.state.count + 1,
})
},1000);
console.log(this.getDOMNode(), this.state.count);
},
componentWillUnmount: function(){
alert('you are tring to kill me !! ')
clearInterval(this.timer);
},
killMySelf: function(){
React.unmountComponentAtNode( document.getElementById('app') );
},
render:function(){
console.log('渲染')
return (
<div>
<h1 > 計數: {this.state.count}</h1>
<button onClick={this.killMySelf}>解除安裝掉這個元件</button>
<Submessage/>
</div>
)
}
});
var Submessage = React.createClass({
render:function(){
return (
<h3>寫程式碼很有意思</h3>
)
}
});
var messageBox = React.render( <MessageBox/>,
document.getElementById('app')
)
</script>
demo2
<script type="text/jsx">
var MessageBox = React.createClass({
getInitialState:function(){
return {
count: 0,
}
},
getDefaultProps:function(){
},
shouldComponentUpdate:function(nextProp,nextState){
console.log('shouldComponentUpdate');
if(nextState.count > 10) return false;
return true;
},
componentWillUpdate:function(nextProp,nextState){
console.log('componentWillUpdate');
},
componentDidUpdate:function(){
console.log('componentDidUpdate');
},
killMySelf: function(){
React.unmountComponentAtNode( document.getElementById('app') );
},
doUpdate:function(){
this.setState({
count: this.state.count + 1,
});
},
render:function(){
console.log('渲染')
return (
<div>
<h1 > 計數: {this.state.count}</h1>
<button onClick={this.killMySelf}>解除安裝掉這個元件</button>
<button onClick={this.doUpdate}>手動更新一下元件(包括子元件)</button>
<Submessage count={this.state.count}/>
</div>
)
}
});
var Submessage = React.createClass({
componentWillReceiveProps:function(nextProp){
console.log('子元件將要獲得prop');
},
shouldComponentUpdate:function(nextProp,nextState){
if(nextProp.count> 5) return false;
return true;
},
render:function(){
return (
<h3>當前計數是:{this.props.count}</h3>
)
}
});
var messageBox = React.render( <MessageBox/>,
document.getElementById('app')
)
</script>
相關文章
- React 元件生命週期詳解React元件
- React元件生命週期詳解React元件
- React原始碼分析3—React生命週期詳解React原始碼
- React生命週期React
- React 生命週期React
- vue生命週期詳解Vue
- 詳解vue生命週期Vue
- Service生命週期詳解
- React-生命週期React
- React 元件生命週期React元件
- React元件生命週期React元件
- 詳解Vue生命週期【上】Vue
- 你真的瞭解 React 生命週期嗎React
- React 渲染 和 生命週期React
- React 基礎_生命週期React
- react 生命週期變遷React
- React新的生命週期React
- React專題:生命週期React
- React生命週期總結React
- react之元件生命週期React元件
- react生命週期筆記React筆記
- [React]元件的生命週期React元件
- React 生命週期淺談React
- 淺析 React 生命週期React
- React Native 生命週期React Native
- 詳解 Vue 生命週期實現Vue
- Vue的生命週期的詳解Vue
- Java類的生命週期詳解Java
- Android Activity生命週期詳解Android
- React v16 生命週期函式詳解:如何、何時使用它們(React 元件生命週期的修訂和最新指南)React函式元件
- React-生命週期雜記React
- React生命週期的變化React
- 重新認識 React 生命週期React
- 簡述React的生命週期React
- React原始碼分析 - 生命週期React原始碼
- 理解React-元件生命週期React元件
- React筆記(元件生命週期)React筆記元件
- 理解React元件的生命週期React元件