未定义不是对象(评估'this.state.input')

时间:2016-09-08 14:53:20

标签: javascript reactjs react-native react-redux reactjs-flux

我正在尝试从json文件中读取密钥并在文本字段中显示其值。用户将在TextInput字段中输入键值。以下是我使用的代码。在输入文本并按下提交按钮后,它会抛出“未定义不是对象(评估'this.state.input')”错误。我认为将值绑定/传递给showMeaning()函数存在一些问题。请帮忙。

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;
})

2 个答案:

答案 0 :(得分:0)

当您致电showMeaning时,它未绑定到正确的上下文(this)。你应该bind它或使用具有词汇this的箭头函数,例如:

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

答案 1 :(得分:0)

正如madox2所说,showMeaning未正确绑定到this。这是一个棘手的问题,有几种可能的解决方案,其优缺点列于this medium post。我认为最干净的是选项5,但这需要使用第2阶段的功能。