2017-11-28 3 views
1

나는 반응이 새로운 오전, 그리고 간단한 카운트 다운 애플 리케이션을 만들려고합니다. 그러나 반응에서, 나는 모든 기능에 대한 전역 변수를 부여하는 방법을 알지 못한다. 제 코드를 살펴 보시고 어쨌든 일시 중지를하고 계속 버튼을 사용할 수 있습니까? 일반 자바 스크립트에서 전역 변수로 타이머를 설정하고 다른 함수에서 해당 함수에 대한 액세스를 얻을 수 있습니다. 원하는 경우 타이머에서 clearInterval을 호출 할 수 있지만 반응에서 타이머를 일시 중지하기 위해 clearInterval을 호출하는 방법을 알지 못합니다. 기능은 시작 기능 블록에서 제한되어 있기 때.입니다.거기에 방법을 외부에있는 함수의 내부 변수를 전달하는 것입니다

import React from 'react'; 
import ReactDOM from 'react-dom'; 

class Countdown extends React.Component{ 
    render(){ 
     return(
      <div> 
       <button onClick={()=>begin()}>start</button> 
       <button>pause</button> 
       <button>continue</button> 
      </div> 
     ); 
    } 
}; 

const begin=(props)=>{ 
    let count = 10; 
    const timer = setInterval(countdown,1000); 
    function countdown(){ 
     count=count-1 
     if (count<0){ 
      clearInterval(timer); 
      return; 
     } 
     console.log(count) 
    } 
} 

ReactDOM.render(<Countdown/>, document.getElementById('app')); 
+0

는 당신과 같은 경우를 데으로이 확실히 도움이 될 것이다, https://reactjs.org/docs/state-and -lifecycle.html –

+0

감사합니다. 기능을 시작하기 전에 타이머에 액세스 할 수 없어서 clearInterval에 문제가 발생했습니다. Javascript vanilla에서 전역 변수로 타이머를 선언 한 다음 사방에 액세스 할 수 있지만 반응을 할 수는 없습니다. – Nhat

답변

1

당신은 다음과 같이 수행 할 수 있습니다

class Countdown extends React.Component{ 
    constructor() { 
     super(); 
     //set the initial state 
     this.state = { count: 10 }; 
    } 
    //function to change the state 
    changeCount(num){ 
     this.setState({count:num}); 
    } 
    render(){ 
     return(
      <div> 
       <button onClick={()=>begin(this.changeCount.bind(this), this.state.count)}>start</button> 
       <button>pause</button> 
       <button>continue</button> 
       <p>{this.state.count}</p> 
      </div> 
     ); 
    } 
}; 
//callback function to change the state in component 
//c is the initial count in state 
const begin=(fun, c)=>{ 
    let count = c; 
    const timer = setInterval(countdown,1000); 
    function countdown(){ 
     count=count-1 
     if (count<0){ 
      clearInterval(timer); 
      return; 
     } 
     fun(count) 
     console.log(count) 
    } 
} 

ReactDOM.render(<Countdown/>, document.getElementById('example')); 

작업 코드 here

+0

고맙습니다. 일시 중지 기능을 위해 clearInterval()을 호출 할 수 있도록 타이머에 액세스하는 방법을 알고 계십니까? – Nhat

관련 문제