在onAuthStateChanged中的本机Firebase Auth setState得到TypeError:this.setState不是一个函数

时间:2019-07-02 19:12:03

标签: javascript firebase react-native firebase-authentication

我从react-native开始,并尝试使用onAuthStateChanged获取Firebase用户数据。

我尝试做bind this,但仍然对此一无所知。

这是我的构造函数

constructor(props) {
    super(props);
    this.state = {
    isUid: '',
      isProvider:'',

      isPhoneNumber:'', 
    };

这是我在componentDidMount中的onAuthStateChange

componentDidMount() { 
var user = firebase.auth().currentUser;
firebase.auth().onAuthStateChanged(function (user) {
    if (user) {
      user.providerData.forEach(function (profile) {

        this.setState({isProvider: profile.providerId}, console.log(isProvider)).bind(this); 
        this.setState({isPhoneNumber: profile.phoneNumber}, console.log(isPhoneNumber)).bind(this);
        this.setState({isUid: user.uid}, console.log(isUid)).bind(this);
});
} else {
  console.log('no user');
}
}

1 个答案:

答案 0 :(得分:0)

由于您处于onAuthStateChanged回调中,因此this的含义与其他含义不同。

最简单的解决方法是使用粗箭头符号,该符号保持this的含义:

firebase.auth().onAuthStateChanged((user) => {
    if (user) {
      user.providerData.forEach(function (profile) {
        this.setState({isProvider: profile.providerId}, console.log(isProvider)).bind(this); 
        this.setState({isPhoneNumber: profile.phoneNumber}, console.log(isPhoneNumber)).bind(this);
        this.setState({isUid: user.uid}, console.log(isUid)).bind(this);
      });
    } else {
      console.log('no user');
    }
}