2016-09-08 6 views
1

Ich versuche, den Schlüssel aus einer JSON-Datei zu lesen und seinen Wert in einem Textfeld anzuzeigen. Der Benutzer gibt den Schlüsselwert in das Feld TextInput ein. Folgendes ist der Code, den ich verwende. Es wirft "Undefined ist kein Objekt (Bewertung von 'this.state.input')" Fehler nach Eingabe des Textes und Drücken der Schaltfläche "Senden". Ich denke, es gibt ein Problem beim Binden/Übergeben des Wertes an die showMeaning() -Funktion. Bitte helfen Sie.Undefined ist kein Objekt (Bewertung 'this. State.input')

import React, {Component} from 'react'; 
import {AppRegistry, StyleSheet, Text, TextInput, View} from 'react-native'; 

var english_german = 'english_german.json'; 
class Dictionary extends Component { 
    constructor(props) { 
    super(props); 
    this.state = { 
     input: '', 
     output: '' 
    }; 
    } 

    showMeaning() { 
    var meaning = this.state.input in english_german ? english_german[this.state.input] : "Not Found"; 
    this.setState({ 
     output: meaning 
    }); 
    } 

    render() { 
    return (
     <View style={styles.parent}> 
     <Text> 
      Type something in English: 
     </Text> 
     <TextInput value={this.state.input} 
      onChangeText={(input) => this.setState({ input }) } 
      onSubmitEditing = {this.showMeaning} 
      /> 
     <Text style={styles.germanLabel}> 
      Its German equivalent is: 
     </Text> 
     <Text style={styles.germanWord}> 
      {this.state.output} 
     </Text> 
     </View> 
    ); 
    } 
}; 

var styles = StyleSheet.create({ 
    parent: { 
    padding: 16 
    }, 
    germanLabel: { 
    marginTop: 20, 
    fontWeight: 'bold' 
    }, 
    germanWord: { 
    marginTop: 15, 
    fontSize: 30, 
    fontStyle: 'italic' 
    } 
}); 

AppRegistry.registerComponent('Dictionary', function() { 
    return Dictionary; 
}) 
+0

var english_german = 'english_german.json'; 'var english_german' muss der Inhalt Ihrer Datei sein, nicht der Name selbst. – lustoykov

+0

@leo Wie importiere ich den Inhalt der JSON-Datei? Ich habe requeste() ausprobiert und importiert. Beide haben Fehlermeldungen ausgegeben, dass das Modul nicht verfügbar ist. – Ronald

Antwort

0

Wenn Sie anrufen showMeaning ist es nicht auf den richtigen Kontext (this) gebunden. Sie sollten es Pfeil Funktion bind oder verwenden, die lexikalische this hat, z.B .:

onSubmitEditing = {() => this.showMeaning()} 
+0

Oder fügen Sie dies in Ihren Konstruktor 'this.showMeaning = this.showMeaning.bind (this)'. Es fühlt sich Millionen Mal gesagt: D Sehen Sie sich https://facebook.github.io/react/docs/reusable-components.html an. –

+0

Danke für Ihre Antwort. Jetzt wird die Bidning-Fehlermeldung nicht angezeigt. Es sieht jedoch so aus, als ob der Inhalt nicht vom JSON geladen wird. Wie importiere ich den Inhalt der JSON-Datei? Ich habe require() sowie 'import * from *' versucht. Beide haben Fehlermeldungen ausgegeben, dass das Modul nicht verfügbar ist. – Ronald

0

Wie madox2 gesagt wird showMeaning nicht korrekt an this gebunden. Dies ist ein heikles Thema mit mehreren möglichen Lösungen, deren Vor- und Nachteile in this medium post aufgeführt sind. Der sauberste ist meiner Meinung nach Option 5, aber das erfordert die Verwendung von Stufe-2-Funktionen.

Verwandte Themen