无法在React Native setState中找到变量字母

时间:2017-10-11 22:07:43

标签: javascript reactjs react-native ecmascript-6

我尝试在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的。

2 个答案:

答案 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})并且因为您没有变量命名信你得到一个错误