圖片來源 : React生命週期表
Mounting :
執行一次
。執行兩次
Update :
還沒被render
時調用。Unmounting :
Step 1 : 建立一個index.js
import React from "react"
import ReactDOM from "react-dom"
import LifeCyle from "./LifeCyle"
ReactDOM.render(<LifeCyle />,document.getElementById("root"));
Step 2 : 建立Component LifeCyle (建立constructort並接受使用者輸入改變state)
import React from "react"
import Content from "./content"
class LifeCyle extends React.Component
{
constructor()
{
super();
this.state = {
data : 0
}
this.setNewNumber = this.setNewNumber.bind(this);
console.log('Constructor');
console.log("在Component被建立時初始化物件");
console.log("---------------------------");
}
setNewNumber()
{
this.setState({
data : this.state.data + 1
})
}
render()
{
return(
<div>
<button onClick = {this.setNewNumber}>INCREMENT</button>
<Content myNumber = {this.state.data}></Content>
</div>
)
}
}
export default LifeCyle;
Step 3 : 建立Component Content (console出各項React生命週期函數)
import React from "react"
class Content extends React.Component
{
componentWillMount()
{
console.log('Component WILL MOUNT!');
console.log("緊接在constuctor後面執行");
console.log("---------------------------");
}
componentDidMount()
{
console.log('Component DID MOUNT!');
console.log("render執行完後調用");
console.log("---------------------------");
}
componentWillReceiveProps(newProps)
{
console.log('Component WILL RECEIVE PROPS!');
console.log("當元件接受到新的(更新)props時會被執行");
console.log("---------------------------");
}
componentWillUpdate(nextProps, nextState)
{
console.log('Component WILL UPDATE!');
console.log("在接收到新的props或state但還沒被render時調用");
console.log("---------------------------");
}
componentDidUpdate(prevProps, prevState)
{
console.log('Component DID UPDATE!');
console.log("在畫面被選染更新後使用");
console.log("---------------------------");
}
render()
{
return(
<div>
<h3>{this.props.myNumber}</h3>
</div>
);
}
}
export default Content;
參考資料 :
React.Component
React 组件生命周期|菜鳥教程
React Life Cycle 生命週期更新版,父子元件執行順序
iT幫幫忙鐵人賽 React 生命週期(Life Cycle)