【问题标题】:How to use setState() inside compoentWillMount ReactJS如何在 compoentWillMount ReactJS 中使用 setState()
【发布时间】:2018-05-18 17:12:39
【问题描述】:

我是 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

需要帮助:(

【问题讨论】:

    标签: javascript reactjs react-lifecycle


    【解决方案1】:

    几件事:

    1) 您需要将此代码移至componentDidMountcomponentWillMountdeprecatedHere's 更多关于为什么你应该更喜欢 componentDidMount 的信息

    2) 将您的 onAuthStateChanged 回调更改为 arrow function

    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
        })
      }
    })
    
    }
    

    【讨论】:

    • 我只是从 Firebase 文档中复制粘贴。我会记住这一点。 tysm
    • @Kim 你能链接文档吗?我们应该尝试更新它
    • 不..这是firebase的javascript项目文档。这是我的错:(
    【解决方案2】:

    问题来自:

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

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

    Firebase.auth().onAuthStateChanged((user) => {
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-07
      • 2019-01-19
      • 1970-01-01
      • 2021-01-12
      • 1970-01-01
      • 2021-04-25
      • 2015-12-17
      • 1970-01-01
      相关资源
      最近更新 更多