React.js開發入門教學(7)-計時器

突發奇想想說如果用到現在學會的幾個方式來作個時鐘的話,應該怎麼做,爬了一下文,發現其實

Compoment有個生命週期,也就是會有初始化>掛載>卸載等等的動作。所以就可以利用這點來作

一個DOM剛啟動的時候應該作什麼事情,而不用等著我們去啟動他!所以我覺得可以這樣寫!也真

真的可以動XD~,程式碼是這樣

var input_style = {
      color: '#FF00FF'
  }
  var input_attr = {
      type: 'text',
      readOnly: true
}
class LeoTimer extends React.Component {
      constructor(props) {
        super(props);
        this.state = {now: 0};
    }
    timer_plus() {
        var time_obj = new Date();
        var year = time_obj.getFullYear();
        var month = (time_obj.getMonth()+1 < 10 ? '0' : '') + (time_obj.getMonth()+1);
        var day = (time_obj.getDay() < 10 ? '0' : '') + time_obj.getDay();
        var hour = (time_obj.getHours() < 10 ? '0' : '') + time_obj.getHours();
        var min = (time_obj.getMinutes() < 10 ? '0' : '') + time_obj.getMinutes();
        var sec = (time_obj.getSeconds() < 10 ? '0' : '') + time_obj.getSeconds();
        var nowtime = year + '/' + month + '/' + day + ' ' + hour + ':' + min + ':' + sec
        this.setState({now: nowtime});
    }
    timer_stop() {
        clearInterval(this.interval);
    }
    componentDidMount() {
           this.interval = setInterval(this.timer_plus.bind(this), 1000);
    }
    componentWillUnmount() {
        clearInterval(this.interval);
    }
    render() {
        return (
            <div>
                <input style={input_style} {...input_attr} value={this.state.now}/>
                <button onClick={this.timer_stop.bind(this)}>STOP</button>
                <button onClick={this.componentDidMount.bind(this)}>RESTART</button>
            </div>
        )
    }
}

ReactDOM.render(
      <LeoTimer />,
      document.getElementById('test')
);

這邊比較重要的地方就是componentDidMount()與componentWillUnmount()這兩個方法。

在React中DOM在啟動的時候在被掛載的時候,掛載分成三個部分,分別是

1.getInitialState():當物件被調用的時候被執行,也就是我們現在ES6用的constructor()
2.componentWillMount():當整個物件已經完成處理後被執行
3.componentDidMount():當物件被塞到DOM中的時候被執行,也就是被塞到的時候執行!

所以我們才利用了這一點讓他整個元件構築好之後被塞到DOM的那時自動啟動計時器,然後每一秒更新一次來達到

我們即時更新畫面時間的需求!突然覺得好方便啊!雖然jQuery的.attr()也可以做到一樣的事情,但是jQuery

是去修改已經存在業面上的東西,概念上好像有點不太一樣:P,我也不是很懂。