2017-01-29 2 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 거라 생각으로 설정해야합니다 새로운 날짜()를 정의 할 때 toLocaleTimeString()가'에만 실행됩니다.. – mplungjan

+0

^yes 시간 내에 새로운 날짜를 얻거나 getInitialState를 호출하는 함수를 반환해야합니다. 현재 코드는 똑딱 똑같은 시간마다 업데이트됩니다. – 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() { 새로운 날짜(). toLocaleTimeString() }을 반환하고 작동합니다. 고마워요 :) – finsanurpandi

+0

'''getTime''함수가 컴포넌트 외부에 있어야한다고 말하고있었습니다. 하지만 컴포넌트 메소드로도 동작한다. 대신에'''this.getTime()'''으로 호출해야한다. – shadymoses

0

당신은 당신이 여기에 대한 자세한 내용을 볼 수 있었다 당신의 setTimeout 기능이 결합해야합니다 https://facebook.github.io/react/docs/handling-events.html

setInterval(this.tick, 1000).bind(this) 

과 변화를위한 당신의 날짜 만 귀하의 주에 새로운 날짜를 적용하십시오 :

this.setState({waktu: new Date()}) 
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>

관련 문제