【问题标题】:Error while cleaning up onAuthStateChanged inside useEffect清理 useEffect 中的 onAuthStateChanged 时出错
【发布时间】:2021-11-29 15:16:57
【问题描述】:

我返回 onAuthStateChanged unsubscribe() 函数来清理 useEffect 但它没有取消订阅。什么可能导致此错误?

useEffect(() => {
        const unsubscribe = onAuthStateChanged(auth, (user) => {
            if(user){
                setInterval(()=>{
                    setUser(user)
                    history.push('/home')

                }, 1500)
            }
            else if(!user){
                setInterval(()=>{
                    history.push('/login')
                    
                }, 1500)
            }
        })
        return ()=> unsubscribe()
    }, [])

【问题讨论】:

  • 为什么会有setInterval?在状态变化中使用 setInterval 并不是最好的方法。我的猜测是导致问题的原因

标签: javascript reactjs firebase react-hooks use-effect


【解决方案1】:

上面的代码可能有一些问题,我相信首先setInterval是必要的,其次,你返回的是一个闭包而不是函数本身,onAuthStateChange在状态改变时返回一个函数,你可以试试这个。

useEffect(() => {
        const unsubscribe = onAuthStateChanged(auth, (user) => {
            if(user){
               setUser(user)
               history.push('/home')
            }
            else {
                history.push('/login')
            }
        });

        return unsubscribe();
    }, [])

【讨论】:

    猜你喜欢
    • 2021-08-31
    • 2021-12-24
    • 1970-01-01
    • 2022-01-23
    • 2021-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-07
    相关资源
    最近更新 更多