Как использовать setState () внутри compoentWillMount ReactJS - PullRequest
0 голосов
/ 18 мая 2018

Я новичок в ReactJ.Я пытаюсь создать приложение 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

Нужна помощь: (

Ответы [ 2 ]

0 голосов
/ 18 мая 2018

Несколько вещей:

1) Вы захотите переместить этот код на componentDidMount.componentWillMount is устарело . Вот немного больше информации о том, почему вы должны предпочесть 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
    })
  }
})

}
0 голосов
/ 18 мая 2018

Проблема возникает из:

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

this не относится к компоненту реакции.Вместо этого попробуйте:

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