仿生人如何在本机中重新渲染2次

问题描述 投票:0回答:1

我已经尝试根据用户检查进行路由,但是我做了,但是我的方法工作了两次。我从我的日志中了解它

我正在使用redux,这是mainrouter.js中的“ useeffect”

// currentUser : null // in  initialState for users

useEffect(() => {
    if(states.currentUser== null)
    {
        console.log("Checking user for routing");
        actions.getCurrentUserACT();
    }
    else{
        console.log("Logged in")
    }
},[]);

我的mainrouter.js返回

 return (
    <NavigationContainer>
        {
            states.currentUser == null ?
                (this.SignStackScreen()) :
                (this.MainTabNavigator())
        }
    </NavigationContainer>
);

这是我在redux操作中的“ getCurrentUserAct”方法

export function getCurrentUserACT() {
return function (dispatch) {

    firebase.auth().onAuthStateChanged(user => {
        if (user) {
            console.log("User authed..");
            dispatch({type:actionTypes.CURRENT_USER,payload:user})
        } else {
            console.log("User notauthed..");
            dispatch({type:actionTypes.CURRENT_USER,payload:null})
        }
    });
}

enter image description here

当我的应用启动时,日志是..(如果我之前登录过)

  • 检查用户的路由
  • 用户已认证
  • 用户已认证

我认为其原因是,useeffect首次起作用,并且状态改变了,用于返回和重新呈现”但后来我撤消了条件,日志是一样的。

所以我如何避免这种情况?有没有一种方法可以从useeffect之前运行方法并避免第二次渲染?或等待数据生效?

reactjs react-native redux hook
1个回答
0
投票

您的代码看起来正确,由于useEffect,没有理由记录两次,因为您将它用作componentDidMount,因此被称为一次。

记录两次的原因是此代码段:

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

这里onAuthStateChanged是回调,在Firebase上身份验证状态更改时调用。如果要检查用户是否已登录,则需要避免执行以下操作]

if (user) { }

请尝试console.log(user)并检查用户在两次登录时是否保持相同。我相信用户内部属性将被更改。

希望这有助于您理解

© www.soinside.com 2019 - 2024. All rights reserved.