我看到一些回答说只运行一次useEffect,您必须提供一个空列表作为第二个参数。这是我的代码
const history = useHistory();
useEffect(() => {
console.log('hi')
firebase.auth().onAuthStateChanged((user) => {
if (user)
history.push('/')
})
},[])
首先,lint告诉我“ React Hook useEffect具有缺失的依赖项:'history'。要么包含它,要么删除依赖项数组”。。我不明白这一点,因为历史记录已经删除,因为第二个参数是一个空数组。
第二个控制台无限登录。为什么?
答案 0 :(得分:1)
如果使用依赖挂钩,则只能运行一次使用效果挂钩。每次依赖项更改时,它将强制挂钩重新运行。
您必须将历史记录添加到依赖项列表,因为您正在对useEffect中的历史记录使用push方法。这是不能商量的。
useEffect(() => {
console.log('hi')
firebase.auth().onAuthStateChanged((user) => {
if (user)
history.push('/')
})
},[history])
如果您只想触发一个依赖项的函数,则必须切换回类并使用componentDidMount方法。