2017-10-09 1 views
1

Ich versuche herauszufinden, woher dieser Fehlertyp kommt, aber ich kann es nicht genau lokalisieren. Vielleicht fehlt mir ein wichtiges Konzept von React.React: Kann die Eigenschaft 'getWeather' von undefined nicht lesen

Ich habe eine Wetter Klasse in Reaktion wie:

class Weather extends Component { 
    constructor(props) { 
    super(props); 

    this.state = { 
     cityName: "San Francisco", 
     temp: null, 
    } 
    } 

    getWeather(city) { 
    // does fetch request to openweathermap.org 
    } 

    handleSubmit(event) { 
    event.preventDefault(); 
    this.getWeather(this.state.cityName); 
    // this.state.cityName is updated as the user types 
    } 
} 

das Problem ist, wenn ich die Taste ich eine Fehlermeldung über meine GetWeather Funktion einreichen klicken bekommen sagen:

TypeError: Cannot read property 'getWeather' of undefined

Irgendwelche Empfehlungen? Ich habe versucht, die getWeather-Funktion zu binden, aber es hat nicht geholfen.

+3

Wahrscheinlich ein Problem mit handleSubmit nicht gebunden werden. Können Sie uns zeigen, wo handleSubmit verwendet wird? –

+0

@ NicholasTower das ist es genau. Daniel unten half mir dabei. Nicht sicher, wie ich das vermisst habe, aber wie ich unten sagte, ist meine Komponente viel größer als mein Beispiel zeigt, also denke ich "leicht" übersehen. – crescentfresh

Antwort

2

Sie müssen sowohl getWeather und handleSubmit binden: bezieht

constructor(props) { 
    super(props); 

    this.state = { 
     cityName: "San Francisco", 
     temp: null, 
    } 

    this.getWeather = this.getWeather.bind(this); 
    this.handleSubmit = this.handleSubmit.bind(this); 
    } 
+0

Das war es. Ich habe keine Ahnung, wie ich vergessen habe, auch handleSubmit zu binden. Die Komponente ist größer als ich es mit diesem Code gemacht habe, also habe ich das total übersehen. Ich hatte das Gefühl, dass eine Bindung basierend auf dem Fehler deaktiviert war und du hast es sofort herausgefunden. Vielen Dank!! – crescentfresh

1

In Ihrem Fall this zu Element, nicht Klasse. Verwenden Sie die Pfeilfunktion.

handleSubmit = (event) => { 
    event.preventDefault(); 
    this.getWeather(this.state.cityName); 
    // this.state.cityName is updated as the user types 
    } 
Verwandte Themen