2017-11-28 13 views
1

私は反応が新しく、簡単なカウントダウンアプリを作ろうとしています。しかし、反応では、私はどのようにすべての機能のためのグローバル変数を与えることができるか分からない評価することができます。私のコードを見てください、とにかく私は一時停止を作ることができますし、続行ボタンが機能しますか?プレーンなjavascriptで私はグローバル変数としてタイマーを設定し、別の関数からそれにアクセスすることができます、私は、私が欲しいときにタイマーでclearIntervalを呼び出すことができますが、私はどのようにタイマーの休止を開始するclearIntervalを呼び出すかわからないこれはbegin関数ブロックで制限されているためです。は、反応の外部にある関数の変数を内部に渡す方法です

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で問題を抱えています。なぜなら、begin関数内のタイマーにアクセスすることができないからです。 Javascriptのバニラでは、グローバル変数としてタイマーを宣言してどこにでもアクセスできますが、反応すると私はそれを行うことができませんでした。 – 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

関連する問題