我正在尝试从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;
})
答案 0 :(得分:0)
当您致电showMeaning
时,它未绑定到正确的上下文(this
)。你应该bind它或使用具有词汇this
的箭头函数,例如:
onSubmitEditing = {() => this.showMeaning()}
答案 1 :(得分:0)
正如madox2所说,showMeaning
未正确绑定到this
。这是一个棘手的问题,有几种可能的解决方案,其优缺点列于this medium post。我认为最干净的是选项5,但这需要使用第2阶段的功能。