我有2个用户,管理员和客户端,所以我想做的是,当管理员登录显示不同的底部选项卡,当用户登录显示另一个底部选项卡,都有相同的授权导航和堆栈导航。
下面是我的管理员导航屏幕代码:
const Drawer = createDrawerNavigator();
const AdminNavi=()=>{
return(
<Drawer.Navigator screenOptions={{
headerShown:false
}} drawerContent={props =><DrawerContent {...props}/>}>
<Drawer.Screen name ='Auth' component={AuthNavigator} />
<Drawer.Screen name='AdminTabs' component={AdminTabs} />
<Drawer.Screen name='Stack' component={StackNavigator} />
</Drawer.Navigator>
)
}
export default AdminNavi;
下面是我的用户导航屏幕代码:
const Drawer = createDrawerNavigator();
const UserNavi=()=>{
return(
<Drawer.Navigator screenOptions={{
headerShown:false
}} drawerContent={props =><DrawerContent {...props}/>}>
<Drawer.Screen name ='Auth' component={AuthNavigator} />
<Drawer.Screen name='Tabs' component={Tabs} />
<Drawer.Screen name='Stack' component={StackNavigator} />
</Drawer.Navigator>
)
}
export default UserNavi;
下面是我的应用程序屏幕代码:
const App =({navigation})=>{
const [user, setUser] = React.useState(null) // This user
const [users, setUsers] = React.useState([]) // Other Users
React.useEffect(() => {
const unsubscribe = auth.onAuthStateChanged(async user => {
if (user) {
navigation.navigate('Tabs')
const userData = await db.collection("users").doc(user.uid).get();
setUser(userData.data());
} else {
setUser(null);
}
});
return () => unsubscribe();
}, [])
React.useEffect(() => {
if (user) {
const unsubscribe = db.collection("users").where("role", "==", (user?.role === "admin" ? 'admin' : null))
.onSnapshot(users => {
if (!users.empty) {
const USERS = []
users.forEach(user => {
USERS.push(user.data())
})
setUsers(USERS)
}
});
return () => unsubscribe();
}
}, [user])
return (
<NavigationContainer independent={true}>
{user?.role === 'admin'? <AdminNavi />:<UserNavi/>}
</NavigationContainer>
);
}
export default App;
因此,当我作为用户登录时,我可以登录并看到用户底部选项卡,但当我作为管理员登录时,我仍然可以看到用户底部选项卡,我不能看到管理员底部选项卡,我试图解决它,但我不能。任何帮助都非常感谢
1条答案
按热度按时间zpgglvta1#
在第一个
useEffect
中导航:这将在组件呈现后立即导航到另一个屏幕。
不确定预期的结果是什么,但请尝试删除该行代码,至少您将看到Usernav/Adminnav