未定义不是对象(评估this.state),但在我的方法调用中添加了bind(this)

时间:2019-01-02 16:22:28

标签: javascript reactjs react-native ecmascript-6

在我的应用程序上,我添加了一个可触摸的不透明度,当我单击该按钮时,我需要运行一个功能。

<TouchableOpacity
        activeOpacity={0.9}
        style={styles.Button}
        onPress={this.login_account.bind(this)}
      >
        <Text style={styles.ButtonText}>Login</Text>
</TouchableOpacity>

当我尝试在该函数中访问this.setState时,它会发出警告 enter image description here

我在这方面做错了什么?

这是我的login_account函数

login_account() {
    let username = this.state.username;
    let password = this.state.password;

    error_message = "";
    has_error = false;
    if (username == "" || password == "") {
      error_message += "Username and password should no be empty.";
    }
    if (has_error == false) {

      //code here....

    } else {
      this.setState({
        status_code: 6001,
        message: error_message,
        show_popup: true
      });
    }
  }

2 个答案:

答案 0 :(得分:4)

您将功能绑定到的None可能不是组件的功能,具体取决于该代码在哪里。

尝试在构造函数中进行绑定:

this

或将constructor(props) { super(props); ... this.login_account = this.login_account.bind(this); } 方法转换为箭头函数,以免覆盖login_account

this

答案 1 :(得分:0)

您只需将函数实现为箭头函数,然后就不再需要绑定它:

因此,您的功能将如下所示:

login_account = () => {
   // your code here

}

并将Touchable组件中的function属性修改为:

<TouchableOpacity
        activeOpacity={0.9}
        style={styles.Button}
        onPress={this.login_account}
      >
        <Text style={styles.ButtonText}>Login</Text>
</TouchableOpacity>