如何使用react native和firebase为不同用户显示不同的底部选项卡

cclgggtu  于 2023-02-05  发布在  React
关注(0)|答案(1)|浏览(151)

我有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;

因此,当我作为用户登录时,我可以登录并看到用户底部选项卡,但当我作为管理员登录时,我仍然可以看到用户底部选项卡,我不能看到管理员底部选项卡,我试图解决它,但我不能。任何帮助都非常感谢

zpgglvta

zpgglvta1#

在第一个useEffect中导航:

navigation.navigate('Tabs')

这将在组件呈现后立即导航到另一个屏幕。
不确定预期的结果是什么,但请尝试删除该行代码,至少您将看到Usernav/Adminnav

相关问题