我尝试在setState
中使用TextInput
,如此:
class AppS extends Component {
constructor(props){
super(props);
this.state = {
ShowText: '',
letter: ''
};
}
render(){
return(
<View>
<TextInput style ={{color: "green"}}
onChangeText = {(letter)=>this.setState({ letter })}>
</TextInput>
<Text style = {styleForApps.fon}> {this.state.letter} </Text>
<Text style = {styleForApps.body}> {this.state.ShowText} </Text>
</View>
);
}
}
当我像这样试验setState
时:
onChangeText = {(txt)=>this.setState({ letter: txt })}>
效果很好。但当我把它改为:
onChangeText = {(txt)=>this.setState({ letter })}>
它总是会出错&#34;无法找到变量字母&#34;。我认为setState
指向括号中的参数,该参数应由txt
定义。
你能解释一下吗,我不明白它是如何将价值传递给letter
的。
答案 0 :(得分:7)
您正在尝试使用shorthand property definitions。如果键和值相同,则此ES6功能仅允许您指定键。它不取参数的值。这意味着当你这样做:
{
"inputs": [
{
"type": "ETW",
"providers": [
{ "providerName": "Microsoft-Windows-Services" }
]
}
],
"filters": [],
"outputs": [
{ "type": "StdOutput" }
],
"schemaVersion": "2016-08-11",
"extensions": []
}
这意味着:
this.setState({
letter
});
因为它是desugars所以键和值是相同的。然后报告错误,因为未定义this.setState({
letter: letter
});
。你可以这样做:
letter
这是有效的,因为您将参数命名为(letter) => this.setState({ letter })
,而不是letter
。
答案 1 :(得分:0)
onChangeText
接受一项功能并将用户输入的文字传递到该功能中,在您的示例中,您将该用户输入命名为txt
但在setState
内部#39;请勿将此用户输入分配给letter
,您正在执行的操作是指定this.setState({letter})
转换为this.setState({letter: letter})
并且因为您没有变量命名信你得到一个错误