TypeError:无法读取属性' bind'未定义的反应

时间:2018-06-14 06:27:42

标签: reactjs firebase

我从我的TypeError: Cannot read property 'bind' of undefined函数中获得了pushtofirebase,尽管一切看起来都对我不对。非常感谢任何帮助。

以下是代码:

export default class RegisterView extends React.Component {
  constructor(props) {
    super(props);
    this.pushToFirebase = this.pushToFirebase.bind(this);

  }

  onSubmit = values => {
    var user = {
      firstName: values.fname,
      lastName: values.lname,
      email: values.email,
      password: values.password
    }

    firebase.auth().createUserWithEmailAndPassword(values.email, values.password)
      .then(function () {
        this.pushToFirebase(true);
      })
      .catch(function (error) {
        // Handle Errors here.
        var errorCode = error.code;
        var errorMessage = error.message;
        if (errorCode === 'auth/email-already-in-use') {
          console.log(errorMessage);
        }
        this.pushToFirebase(false);
      });

    this.pushToFirebase = status => {
      if (status) {
        const ref = firebase.database().ref('users/').push(user);
        console.log('im inside pushToFirebase');
        console.log(ref.key);
        this.props.setuserkey;
      }
    }

  }
}

我还应该提一下,我是新手做出反应,经过3周的坚实反应,我仍然很新。

再次感谢大家抽出时间。

5 个答案:

答案 0 :(得分:1)

您在pushToFirebase内声明onSubmit。应该是

export default class RegisterView extends React.Component {

  // make it class property
  pushToFirebase = status => {
      if (status) {
        const ref = firebase.database().ref('users/').push(user);
        console.log('im inside pushToFirebase');
        console.log(ref.key);
        this.props.setuserkey;
      }
    }

  onSubmit = values => {
    var user = {
      firstName: values.fname,
      lastName: values.lname,
      email: values.email,
      password: values.password
    }

    firebase.auth().createUserWithEmailAndPassword(values.email, values.password)
      .then( () => { // Use arrow function
        this.pushToFirebase(true);
      })
      .catch( (error) => {  // Use arrow function
        // Handle Errors here.
        var errorCode = error.code;
        var errorMessage = error.message;
        if (errorCode === 'auth/email-already-in-use') {
          console.log(errorMessage);
        }
        this.pushToFirebase(false);
      });
  }
}

此外,您不需要在构造函数中绑定箭头函数属性。

UPD 您还需要使用箭头功能替换function()处理程序以捕获this.

答案 1 :(得分:0)

从函数定义中省略this。而不是:

this.pushToFirebase = status => {

使用:

pushToFirebase = status => {

并将其移至您的班级而不是onSubmit函数。

此外,您不必在构造函数中绑定您的函数,因为您在此处使用箭头函数。

答案 2 :(得分:0)

  

TypeError:无法读取属性' bind'未定义的pushtofirebase

缺少pushtofirebase的功能定义。

因此,没有与this object关联的此属性的属性。它会导致此异常。

答案 3 :(得分:0)

this.pushToFirebase = status => {更改为pushToFirebase = status =>,并将该功能移至onSubmit功能之外。

由于这是一个箭头功能,你不必this.pushToFirebase = this.pushToFirebase.bind(this); 这行,你可以删除它

所以看起来应该像

export default class RegisterView extends React.Component {
 constructor(props) {
  super(props);

 }
 pushToFirebase = status => {
   if (status) {
     const ref = firebase.database().ref('users/').push(user);
     console.log('im inside pushToFirebase');
     console.log(ref.key);
     this.props.setuserkey;
   }
 }

答案 4 :(得分:0)

试试这个

 this.pushToFirebase (status) {

希望这对你有所帮助