2017-01-28 8 views
0

Ich bin neu auf reagieren und jetzt habe ich ein Problem. Ich habe in meiner app 3 Komponente: App Komponente:Throttle verstecken/zeigen Komponente ReactJs

class App extends Component { 

    constructor(){ 
     super(); 
     this.state = { 
      showToast:false, 
      toastMessage: "" 
     }; 

     this.handleShowToast = this.handleShowToast.bind(this); 
    }; 

    handleShowToast(message) { 
     this.setState({ showToast: true, toastMessage: message}); 
     setTimeout(function() { 
      if(this.state.showToast){ 
       this.setState({ showToast: false }); 

      }}.bind(this), 2000); 
     }; 


    render() { 
    return (
      <div id="cont"> 
       <Toast showToast={this.state.showToast} messageToast={this.state.toastMessage} /> 
       <Header handleToast={this.handleShowToast}/> 
      </div> 
    ); 
    } 
} 

In meinen Kopf Komponenten I auf der Schaltfläche klicken und hadleShowToast wird ausführen und Toast Component ist richtig dargestellt und es funktioniert, aber Ich würde (jetzt mache ich mit setInterval, aber funktioniert nicht, denn wenn ich ein zweites Mal klicken Sie die Taste sofort ausblenden, weil es eine Präzedenzfall setInterval) ausblenden Toast-Komponente, nach 2 Sekunden, wenn ich nicht erneut auf eine Schaltfläche klicken , aber wenn ich wieder Knopf in Header Komponente ich wou klicken d Timer zurücksetzen. Wie kann ich das tun?

Antwort

1

Sie können clearTimeout klare Timer verwenden:

handleShowToast(message) { 
    this.setState({ showToast: true, toastMessage: message}); 
    if (this.timer) { 
     clearTimeout(this.timer) 
    } 
    this.timer = setTimeout(function() { 
     if(this.state.showToast){ 
      this.setState({ showToast: false }); 
     } 
     this.timer = null; 
    }.bind(this), 2000); 
} 
+0

Ja !! Danke! Ich werde akzeptieren! Aber kann ich die Entprellfunktion beantworten? Ich habe es versucht, aber es gibt "undefined" _ "" – LorenzoBerti

+1

Ich denke, das ist [lodash.debounce] (https://lodash.com/docs#debounce). Um dies zu verwenden, müssen Sie eine lodash (oder Unterstreichungs) library einschließen. – lorefnon

Verwandte Themen