【问题标题】:User role wise drawer navigation in react-nativereact-native 中的用户角色明智的抽屉导航
【发布时间】:2019-12-27 06:33:36
【问题描述】:

我添加了 react-navigation-drawer 用于在我的应用中实现抽屉导航。我创建了一个名为 PrimaryNav.js 的文件,并在其中添加了所有导航代码。

import Login from './components/Login';
import Employee from './pages/Employee';
import { createAppContainer,SafeAreaView, } from 'react-navigation'
import { createDrawerNavigator, DrawerItems } from 'react-navigation-drawer';
import React from 'react';

const Primary_Nav = createDrawerNavigator({
    Login: {
      screen: Login,
      navigationOptions: {
        drawerLabel: () => null
      }
    },
    Home_kitchen: {
      screen: Home_kitchen,
      navigationOptions: {
        drawerLabel: "Home"
      }
    },
    Employee: {
      screen: Employee,
      navigationOptions:{
        drawerLabel:"Employee",
      }
    },
  },{
    initialRouteName:'Login',
    drawerPosition: 'left',
    drawerType: "slide",
    }
});

const PrimaryNav = createAppContainer(Primary_Nav);
export default PrimaryNav;

类似上面的东西。我在App.js 中调用了这个文件,我面临的问题是我需要根据用户的角色设置一个抽屉项目。因此,如果用户角色是收银员,他应该无法看到所有菜单。

抽屉菜单中的所有页面都正常显示,但问题是我应该如何在我的应用程序中明智地管理菜单角色并根据用户的角色更改菜单? p>

【问题讨论】:

标签: android ios react-native navigation react-navigation-drawer


【解决方案1】:

您好,我看到了您的问题,正在努力帮助您。 我已经为抽屉组件进行了定制设计。 -首先您可以为抽屉设计创建一个额外的文件,例如DrawerComponent.js 并在您要创建抽屉导航器的代码中导入

import DrawerComponent from "./DrawerComponent";

const Primary_Nav = createDrawerNavigator(
{
 Login: {
  screen: Login,
  navigationOptions: {
    drawerLabel: () => null
  }
},
Home_kitchen: {
  screen: Home_kitchen,
  navigationOptions: {
    drawerLabel: "Home"
  }
},
Employee: {
  screen: Employee,
  navigationOptions: {
    drawerLabel: "Employee"
  }
}
},
{
  initialRouteName: "Login",
  drawerPosition: "left",
  drawerType: "slide",
  contentComponent: DrawerComponent // i added this DrawerComponent
}
);

const PrimaryNav = createAppContainer(Primary_Nav);
export default PrimaryNav;

现在在DrawerComponent.js

import React, { Component } from "react";
import { Text, View, TouchableOpacity } from "react-native";

export default class DrawerComponent extends Component {
  constructor(props) {
    super(props);

    this.state = {
      role: 1 // i used 1 for cashier and 0 for chef
    };
  }

  render() {
    const { role } = this.state;
    const { navigation } = this.props;
    return (
      <View style={{ flex: 1, paddingVertical: 40, paddingHorizontal: 20 }}>
        <TouchableOpacity
          style={{ margin: 20 }}
          onPress={() => navigation.navigate("Home_kitchen")}
        >
          <Text>Home</Text>
        </TouchableOpacity>
        {role ? (
          <TouchableOpacity
            style={{ margin: 20 }}
            onPress={() => navigation.navigate("Employee")}
          >
            <Text>Employee</Text>
          </TouchableOpacity>
        ) : null}
      </View>
    );
  }
}

如果您将角色更改为 0,则在 Drawer Navigator 中禁用 Employee 选项卡我让用户使用 三元运算符 来获取条件。您可以根据需要进行修改。希望对你有所帮助。

【讨论】:

  • 您好,感谢您的回复。该角色将动态地来自 api 调用。因此,当我尝试登录时,我会获得用户的角色,并且应该会出现基于该角色的菜单。因此,第一次登录时,您的代码将无法正常工作,但在第一次登录后,我会将数据存储在异步中,然后在抽屉页面中获取数据,我可以根据角色给出条件,然后您的代码将正常工作。
  • 没有。未登录,应用将无法打开。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-08-25
  • 2018-12-09
  • 1970-01-01
  • 1970-01-01
  • 2019-05-22
  • 2023-03-27
  • 1970-01-01
相关资源
最近更新 更多