2017-07-20 4 views
0
class Assets extends React.Component{ 

    constructor() { 
    super(); 
    this.state = { 
      assets: [], 
      secondsElapsed: 0 
     }; 
    } 

tick() { 
    if(start === true){ 

     fetch('/api/user/all/?name='+name, {credentials: 'include', method: 'get'}).then(function(data){ 
     return data.json(); 
     }).then(json => { 
     this.setState({ 
      assets: json 
      }); 
     }); 
     } 
    } 
    } 

ReactDOM.render(<Assets />, document.getElementById('alerts')); 

Dieser Code wirft diesen Fehler bei der Ausführung:setState nicht funktioniert

Uncaught (in promise) TypeError: Cannot read property 'setState' of null 
    at eval (eval at <anonymous> (bundleAlerts.js:3430), <anonymous>:265:15) 
    at <anonymous> 

Der Code wird von webpack halten worden, ob das einen Unterschied macht. Ich habe die ReactCreate-Klasse zuvor verwendet und es funktionierte gut, aber ich habe es geändert, um einen weiteren Fehler zu beheben.

Danke, Ed.

+3

i Problem denke Bindung, verwenden Sie diese. 'Dann ((Daten) => {....' –

+0

Du hast Recht Der 'then..' Teil versteckt wurde. Ich musste im Code-Fenster scrollen, um zu sehen. –

+0

Ich war wirklich dumm sie, aber welcher Teil bin ich ersetzen mit 'dann ((Daten) => {....' –

Antwort

2

Binden Sie Ihre tick Funktion an Ihre Komponente. :) Es war zur Zeit an die Funktion gebunden und nicht an die Klassenkomponente, daher konnte es nicht auf 'dieses' zugreifen, was bedeutet, dass es nicht auf deine Requisiten oder deinen Status zugreifen kann. Sie können entweder das folgende Beispiel verwenden, den Autobind Decorator (ES7) oder die Eigenschaften der Klasse transformieren "tick =() => {...}".

class Assets extends React.Component { 
 
    constructor() { 
 
    super(); 
 
    this.state = { 
 
     assets: [], 
 
     secondsElapsed: 0 
 
    }; 
 
    this.tick = this.tick.bind(this); 
 
    } 
 
    tick() { 
 
    if (start === true) { 
 
     fetch("/api/user/all/?name=" + name, { 
 
     credentials: "include", 
 
     method: "get" 
 
     }) 
 
     .then(data => { 
 
      return data.json(); 
 
     }) 
 
     .then(json => { 
 
      this.setState({ 
 
      assets: json 
 
      }); 
 
     }); 
 
    } 
 
    } 
 
    // ...rest of component 
 
} 
 

 
ReactDOM.render(<Assets />, document.getElementById("alerts"));

+1

Haben Sie etwas vergessen? :) Was wird diese Komponente zeigen? – Andrew

+0

Ein Spread-Kommentar hinzugefügt;) @Andrew – Win

+1

Sie möchten erklären, warum dies erforderlich ist. –

Verwandte Themen