React useEffect()使用Firebase和react-router的无限循环

时间:2020-01-09 07:44:29

标签: reactjs firebase authentication

我看到一些回答说只运行一次useEffect,您必须提供一个空列表作为第二个参数。这是我的代码

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

首先,lint告诉我“ React Hook useEffect具有缺失的依赖项:'history'。要么包含它,要么删除依赖项数组”。。我不明白这一点,因为历史记录已经删除,因为第二个参数是一个空数组。

第二个控制台无限登录。为什么?

1 个答案:

答案 0 :(得分:1)

如果使用依赖挂钩,则只能运行一次使用效果挂钩。每次依赖项更改时,它将强制挂钩重新运行。

您必须将历史记录添加到依赖项列表,因为您正在对useEffect中的历史记录使用push方法。这是不能商量的。

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

如果您只想触发一个依赖项的函数,则必须切换回类并使用componentDidMount方法。