【发布时间】:2020-05-27 23:42:40
【问题描述】:
我尝试根据用户检查进行路由,我做到了,但我的方法工作了两次。我从我的日志中理解了它
我正在使用 redux,这是我在 mainrouter.js 中的“使用效果”
// 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})
}
});
}
当我的应用启动时,日志是 ..(如果我之前登录过)
- 检查用户的路由
- 用户认证
- 用户认证
我认为这是原因,useeffect第一次工作并且状态改变了,使用哪个作为回报并重新渲染“ 但后来我移除条件,日志是一样的。
那么我怎样才能避免这种情况呢? 有没有办法在 useeffect 之前运行方法并避免第二次渲染?还是等待数据有效?
【问题讨论】:
标签: reactjs react-native redux react-hooks