Lifecycle - ly-yuan-kai/Demo GitHub Wiki
在官方的documents中,使用到跟生命週期相關的兩個functioncomponentDidMount
, componentWillUnmount
componentDidMount()
:這個function是在component render完頁面後觸發。
componentWillUnmount()
:當元件準備要被移除或破壞時觸發。
this.setState()
: function觸發後會重繪一次頁面。
禁止在render()
中使用this.setState()
,會造成無限重繪頁面。
//Clock.js
class Clock extends Component {
constructor(props) {
super(props);
this.state = {date: new Date()};
}
componentDidMount() {
this.timerID = setInterval(
() => this.tick(),
1000
);
}
componentWillUnmount() {
clearInterval(this.timerID);
console.log('Clock is closed.');
}
tick() {
this.setState({
date: new Date()
});
}
render() {
return (
<div>
<h2>It is {this.state.date.toLocaleTimeString()}.</h2>
</div>
);
}
}
在生命週期中,render()
方法於頁面中最先被執行,完畢後則會觸發componentDidMount()
,因componentDidMount()
中執行setState()
,
在上述提到因執行完setState()
會讓頁面重新render一次,所以Clock.js
才可以讓頁面維持是現在的時間。