2017-01-29 58 views
1

我是新來的reactJS。reactjs setInterval無法正常工作

我想在我的網頁上附加時間。但是,當我使用setInterval的時間不起作用。只需在加載頁面的當前時間停止。

我使用React.createClass:

var MainContent = React.createClass({ 

    getInitialState: function(){ 
    return {waktu: new Date().toLocaleTimeString()} 
    }, 

componentDidMount: function(){ 
    setInterval(this.tick, 1000) 
}, 

tick: function(){ 
    this.setState({waktu: this.state.waktu}) 
}, 

    render: function(){ 

    return(
     <div className="container"> 
     <div className="panel panel-success"> 
      <div className="panel-heading"> 
      <h3 className="panel-title">Panel title</h3> 
      </div> 
      <div className="panel-body"> 
      Panel content &nbsp; 
      {this.state.waktu} 
      </div> 
     </div> 
     </div> 
    ); 
    } 
}); 
+0

我猜想,'waktu:新的Date()toLocaleTimeString()中定義的'時纔會執行。您需要返回一個爲您獲取新日期的函數,或者在超時時間內調用getInitialState – mplungjan

+0

^是。當前的代碼只是在每次打勾的同一時間更新。 – Damon

回答

0

將您的初始時間代碼放入單獨的功能和打電話,只要你setState

function getTime() { 
    return new Date().toLocaleTimeString() 
} 

getInitialState: function() { 
    return { waktu: getTime() } 
} 

tick: function() { 
    this.setState({ waktu: getTime() }) 
} 

您還需要綁定您的setInterval函數。

+0

我得到了一個函數getTime錯誤說:「語法錯誤:意外的令牌,預計,」。 – finsanurpandi

+0

getTime:function(){ 返回新的Date()。toLocaleTimeString() },它工作。謝謝:) – finsanurpandi

+0

我在說'''''''getTime'''函數應該在你的組件之外。但它也可以作爲一個組件方法使用,你只需要用''this.getTime()''調用它即可 – shadymoses

0

在每個間隔後都不會幫助將狀態設置爲自己的值。您需要設置爲當前時間

var MainContent = React.createClass({ 
 

 
    getInitialState: function(){ 
 
    return {waktu: new Date().toLocaleTimeString()} 
 
    }, 
 

 
componentDidMount: function(){ 
 
     setInterval(this.tick, 1000) 
 
    }, 
 
    currentTime: function() { 
 
     return new Date().toLocaleTimeString(); 
 
    }, 
 
    tick: function(){ 
 
     this.setState({waktu: this.currentTime()}) 
 
    }, 
 

 

 
    render: function(){ 
 

 
    return(
 
     <div className="container"> 
 
     <div className="panel panel-success"> 
 
      <div className="panel-heading"> 
 
      <h3 className="panel-title">Panel title</h3> 
 
      </div> 
 
      <div className="panel-body"> 
 
      Panel content &nbsp; 
 
      {this.state.waktu} 
 
      </div> 
 
     </div> 
 
     </div> 
 
    ); 
 
    } 
 
}); 
 

 
ReactDOM.render(<MainContent/>, document.getElementById('app'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script> 
 
<div id="app"></div>

相關問題