我尝试在这样的TextInput
中使用setState
:
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 })}>
它总是给出错误"找不到可变字母"。我认为setState
将参数指向括号中应该由txt
定义的参数。
你能解释一下吗,我不明白它是如何将值传递给letter
的.
您正在尝试使用速记属性定义。此 ES6 功能允许您仅在键和值相同时才指定键。它不采用参数的值。这意味着当您这样做时:
this.setState({
letter
});
它的意思是:
this.setState({
letter: letter
});
因为它脱糖,所以键和值是相同的。然后,这将报告错误,因为未定义letter
。你可以做:
(letter) => this.setState({ letter })
这是有效的,因为您将参数命名为 letter
,而不是 txt
。
onChangeText
接受一个函数并将用户输入的文本传递到该函数中,在您的示例中,您将该用户输入命名为 txt
但在setState
内部您没有将此用户输入分配给letter
,您正在做的是指定this.setState({letter})
翻译成 this.setState({letter: letter})
并且因为您没有名为 letter 的变量,所以会出现错误