【问题标题】:Navigation not working correctly. React native导航无法正常工作。反应原生
【发布时间】:2021-04-21 10:46:07
【问题描述】:

我正在尝试在 React Native 中建模登录、重定向系统,当用户登录时,它会重定向到相应的仪表板。如果用户是管理员,则重定向到管理区,如果用户是普通用户,则重定向到普通用户区。

到目前为止,普通用户是唯一有效的用户,管理员只显示警报框而不重定向到管理区域。但是用户显示警报框并正确重定向到用户区域。

我的 App.js 是这样的:

App.js

import React, {Component} from 'react';
import {
  Platform,
  StyleSheet,
  Text,
  View,
  Image,
  TextInput,
  TouchableOpacity,
  Alert,
  AsyncStorage
} from 'react-native';

import {createAppContainer, createSwitchNavigator} from 'react-navigation';
import {createStackNavigator} from 'react-navigation-stack';
import {createDrawerNavigator} from 'react-navigation-drawer';
import Icon from 'react-native-vector-icons/SimpleLineIcons';

import Splash from './src/Splash';
import Login from './src/Login';
import AdminShout from './src/AdminShout';
import UserHome from './src/UserHome';
import UserShout from './src/UserShout';
import AdminHomePage from './src/AdminHomePage';


const AdminHomeNavigator = createStackNavigator({
  'AdminHomePage': {
    screen: AdminHomePage,
    navigationOptions: ({navigation}) => ({
      headerLeft: () => (
        <TouchableOpacity
          style={{marginLeft: 20}}
          onPress={() => navigation.toggleDrawer()}>
          <Icon name="menu" size={12} />
        </TouchableOpacity>
      ),
    }),
  },
});

const LoginNavigator = createStackNavigator({
  'Login': {
    screen: Login,
    navigationOptions: ({navigation}) => ({
      headerLeft: () => (
        <TouchableOpacity
          style={{marginLeft: 20}}
          onPress={() => navigation.toggleDrawer()}>
          <Icon name="menu" size={12} />
        </TouchableOpacity>
      ),
    }),
  },
});

const AdminShoutNavigator = createStackNavigator({
  'Admin Shout': {
    screen: AdminShout,
    navigationOptions: ({navigation}) => ({
      headerLeft: () => (
        <TouchableOpacity
          style={{marginLeft: 20}}
          onPress={() => navigation.toggleDrawer()}>
          <Icon name="menu" size={12} />
        </TouchableOpacity>
      ),
    }),
  },
});

const UserHomeNavigator = createStackNavigator({
  'User Home': {
    screen: UserHome,
    navigationOptions: ({navigation}) => ({
      headerLeft: () => (
        <TouchableOpacity
          style={{marginLeft: 20}}
          onPress={() => navigation.toggleDrawer()}>
          <Icon name="menu" size={12} />
        </TouchableOpacity>
      ),
    }),
  },
});

const UserShoutNavigator = createStackNavigator({
  'User Shout': {
    screen: UserShout,
    navigationOptions: ({navigation}) => ({
      headerLeft: () => (
        <TouchableOpacity
          style={{marginLeft: 20}}
          onPress={() => navigation.toggleDrawer()}>
          <Icon name="menu" size={12} />
        </TouchableOpacity>
      ),
    }),
  },
});


const DrawerNavigatorAdmin = createDrawerNavigator({
  AdminHomePage: {
    navigationOptions: {
      drawerIcon: (
        <Image
          source={{uri: 'asset:/icons/home.png'}}
          style={{width: 21, height: 21}}
        />
      ),
      drawerLabel: 'Admin Home',
    },
    screen: AdminHomeNavigator,
  },

  AdminShout: {
    navigationOptions: {
      drawerIcon: (
        <Image
          source={{uri: 'asset:/icons/home.png'}}
          style={{width: 21, height: 21}}
        />
      ),
      drawerLabel: 'Admin Shout',
    },
    screen: AdminShoutNavigator,
  },
})

const DrawerNavigatorUser = createDrawerNavigator({
  UserHome: {
    navigationOptions: {
      drawerIcon: (
        <Image
          source={{uri: 'asset:/icons/home.png'}}
          style={{width: 21, height: 21}}
        />
      ),
      drawerLabel: 'User Home',
    },
    screen: UserHomeNavigator,
  },

  UserShout: {
    navigationOptions: {
      drawerIcon: (
        <Image
          source={{uri: 'asset:/icons/home.png'}}
          style={{width: 21, height: 21}}
        />
      ),
      drawerLabel: 'User Shout',
    },
    screen: UserShoutNavigator,
  },
})


const AppSwitchNavigator = createSwitchNavigator(
  {
    Splash: {screen: Splash},
    Login: {screen: Login},
    Drawer: {screen: DrawerNavigatorAdmin},
    Drawer: {screen: DrawerNavigatorUser},
  },
  {
    initialRouteName: 'Splash',
  },
);

const App = createAppContainer(AppSwitchNavigator);

export default App;

然后给出检查其是否为普通用户或管理员的代码:

ShowLogin = () =>{
    const {AccountNum} = this.state;
    const {passcode} = this.state;

    if(AccountNum =='admin' && passcode =='admin'){
        Alert.alert('Logged in as Admin')
        this.props.navigation.navigate('AdminHomePage');
    }
    else if(AccountNum =='user' && passcode =='user123'){
        Alert.alert('Logged in as normal User')
        this.props.navigation.navigate('UserHome');
    }
}

会不会是我做的不对?

【问题讨论】:

    标签: javascript react-native react-navigation


    【解决方案1】:

    您需要在 UserHome 之间添加 Space。

    this.props.navigation.navigate('User Home');
    

    【讨论】:

    • Userhome 工作正常,它的 Admin Home 没有重定向
    • 您能更改其中一个抽屉的名称吗?目前,两个抽屉具有相同的名称。 Drawer1:{screen:DrawerNavigatorAdmin},Drawer2:{screen:DrawerNavigatorUser},
    • 您当前的管理员 HomeStack 和管理员 HomeDrawer 的堆栈名称也相同,并且在用户案例中没有发生,因此也可能是一个问题。
    • 谢谢,Drawer1 很好,drawer2 解决了,再次感谢
    猜你喜欢
    • 2022-01-06
    • 1970-01-01
    • 2021-09-22
    • 2021-08-29
    • 1970-01-01
    • 1970-01-01
    • 2016-08-16
    • 2023-03-04
    • 1970-01-01
    相关资源
    最近更新 更多