2017-11-28 12 views
1

Ich bin neu zu reagieren, und ich versuche, eine einfache Countdown-App zu machen. aber in Reaktion, ich weiß nicht, wie man eine globale Variable für alle Funktionen geben kann, um es zu beurteilen. Bitte schauen Sie sich meinen Code an, kann ich die Pause trotzdem machen und die Fortfahren-Buttons funktionieren? In einfachem JavaScript kann ich Timer als globale Variable einstellen und bekomme Zugriff darauf von einer anderen Funktion, dadurch kann ich ClearInterval auf Timer, wenn ich will, aber ich weiß nicht, wie man ClearInterval für den Timer zu pausieren, beginnen zu starten Funktion, da sie im Begin-Funktionsblock eingeschränkt ist.gibt es eine Möglichkeit, Variable innerhalb einer Funktion außerhalb in Reaktion übergeben

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

würde dies auf jeden Fall helfen, da es den gleichen Fall wie bei Ihnen ist, mit, https://reactjs.org/docs/state-and -lifecycle.html –

+0

danke, ich habe wirklich Probleme mit clearInterval, weil ich nicht Zugriff auf Timer innerhalb der begin-Funktion bekommen kann. In Javascript Vanille kann ich Timer als globale Variable deklarieren und bekomme dann überall Zugriff darauf, aber in Reaktion konnte ich das nicht tun. – Nhat

Antwort

1

Sie können wie folgt tun:

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')); 

Arbeits Code here

+0

Vielen Dank, wissen Sie, wie Sie auf den Timer zugreifen können, damit ich clearInterval() für die Pause-Funktion aufrufen kann? – Nhat

Verwandte Themen