2016-08-14 2 views
0

Wie kann ich den Status bei Klickereignis auf den Schaltflächen ändern? Jetzt habe ich FehlerStatus in ForEach Schleife ändern

Uncaught Typeerror: this.setState ist keine Funktion

Ich weiß, dass ich hier nicht verwenden können this.setState aber ich kann nicht verstehen, wo soll ich binden machen

class Popup extends React.Component { 
    constructor(props){ 
    super(props); 
    this.state = {opened: false}; 
    } 

    componentDidMount(){ 
    var popupOpenBtn = document.querySelectorAll('[data-popup]'); 

    popupOpenBtn.forEach(function(item) { 
     item.addEventListener("click", function(){ 
     this.setState({ 
      opened: true 
     }); 
     }) 
    }); 
    } 
+0

dies ist der Knopf, console.log (this) – epascarello

+1

NIE mutieren this.state direkt, wie der Aufruf von setState() danach kann die Mutation ersetzen Sie gemacht. Behandle diesen Zustand so, als wäre er unveränderlich. – hakiko

+0

Ja, Sie haben Recht. Aber wie kann ich zu Popup gelangen und den Status dafür ändern? –

Antwort

2

Ihr Click-Handler ist auf die Schaltfläche beschränkt, nicht auf die Klasse. Versuchen Sie stattdessen:

class Popup extends React.Component { 
    constructor(props){ 
    super(props); 
    this.state = {opened: false}; 
    } 

    componentDidMount(){ 
    var popupOpenBtn = document.querySelectorAll('[data-popup]'); 
    var component = this; 

    popupOpenBtn.forEach(function(item) { 
     item.addEventListener("click", function() { 
     component.setState({ 
      opened: true 
     }); 
     }) 
    }); 
    } 
+0

In dieser Situation habe ich Uncaught TypeError: Kann die Eigenschaft 'setState' von undefined nicht lesen. Also hier * das * ist nicht meine Komponente –

+0

Ja, es funktioniert! Vielen Dank! –