Реагировать useEffect () Infinite l oop с firebase и реагировать на маршрутизатор - PullRequest
0 голосов
/ 09 января 2020

Я видел, что некоторые ответы говорят, что для запуска useEffect только один раз, вы должны дать пустой список в качестве второго аргумента. Это мой код

  const history = useHistory();
  useEffect(() => {
    console.log('hi')
    firebase.auth().onAuthStateChanged((user) => {
      if (user)
        history.push('/')
    })
  },[])

Сначала линтер говорит мне, что 'React Hook useEffect отсутствует зависимость:' history '. Либо включите его, либо удалите массив зависимостей '. Я не понимаю этого, потому что история уже удалена, поскольку второй аргумент - пустой массив.

Вторая консоль логов бесконечно. Почему?

1 Ответ

1 голос
/ 12 января 2020

Вы не можете запустить обработчик эффекта только один раз, если он использует зависимость. Каждый раз, когда зависимость изменяется, это заставит крюк перезапуститься.

Вы должны добавить историю в список зависимостей, потому что вы используете метод pu sh для истории внутри useEffect. Это не подлежит обсуждению.

useEffect(() => {
    console.log('hi')
    firebase.auth().onAuthStateChanged((user) => {
      if (user)
        history.push('/')
    })
  },[history])

Вам придется переключиться обратно на классы и использовать метод componentDidMount, если вы хотите запустить функцию с зависимостью только один раз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...