1

我是 ReactJs 的新手。我正在尝试使用它创建一个 firebase 应用程序。所以在 componentWillMount 我正在检查用户是否登录并根据它设置状态布尔值

  componentWillMount() {
    var config = {...};
    Firebase.initializeApp(config)

    Firebase.auth().onAuthStateChanged(function(user){
      if(user){
        console.log("User logined");
        this.setState({
          isLogined : true
        })
      }else{
        console.log("User isn't logined");
        this.setState({
          isLogined : false
        })
      }
    })

  }

但它显示 setState() 不是一个函数。

index.js:2178 TypeError: this.setState is not a function
    at Object.next (App.js:31)
    at index.cjs.js:1353
    at index.cjs.js:1457

需要帮忙 :(

4

2 回答 2

3

一些事情:

1) 您需要将此代码移至componentDidMount. componentWillMount弃用这里有一些关于为什么你应该更喜欢 componentDidMount 的更多信息

2)将您的onAuthStateChanged回调更改为箭头函数

componentDidMount() {
var config = {...};
Firebase.initializeApp(config)

Firebase.auth().onAuthStateChanged((user) => {
  if(user){
    console.log("User logined");
    this.setState({
      isLogined : true
    })
  }else{
    console.log("User isn't logined");
    this.setState({
      isLogined : false
    })
  }
})

}
于 2018-05-18T17:16:23.977 回答
2

问题来自:

Firebase.auth().onAuthStateChanged(function(user){

this不是指反应组件。相反,请尝试:

Firebase.auth().onAuthStateChanged((user) => {
于 2018-05-18T17:14:56.680 回答