javascript - 带有标题后退按钮的 React 抽屉导航导航器

标签 javascript reactjs react-native react-navigation

我正在使用 React Navigation v5 的抽屉式导航。在我的根文件中,我创建了抽屉导航器。此导航器内的某些屏幕具有嵌套的堆栈导航器。第一项是仪表板,第二项是关系。

问题是当我转到关系时,我没有得到用于转到第一个屏幕(仪表板)的后退按钮。是否可以将其添加到我的关系屏幕?

根代码:

<NavigationContainer>
  <DrawerNavigator.Navigator
    drawerContent={(props) => (
      <SidebarComponent {...props} user={this.props.device.user} />
    )}
    drawerPosition="right"
    drawerStyle={{width: '90%', padding: 0, backgroundColor: 'red'}}>
    {this.props.authenticated && this.props.device.api_key ? (
      <>
        <DrawerNavigator.Screen
          name="Home"
          options={{
            headerShown: false,
            icon: 'tachometer-alt',
            category: 'dashboard',
          }}
          component={DashboardStack}
        />
        <DrawerNavigator.Screen
          name="Relations"
          options={{
            icon: 'address-book',
            category: 'dashboard',
          }}
          component={RelationsStack}
        />
      </>
    ) : (
      <>
        <DrawerNavigator.Screen
          name="login"
          options={{headerShown: false, gestureEnabled: false}}
          component={LoginStack}
        />
      </>
    )}
  </DrawerNavigator.Navigator>
</NavigationContainer>

关系栈代码:

import 'react-native-gesture-handler';
import React from 'react';
import {createStackNavigator} from '@react-navigation/stack';
import RelationsListScreen from '../RelationsListScreen';
import {colors} from '../../../assets/styles/variables';

const Stack = createStackNavigator();

function RelationsStack() {
  return (
    <Stack.Navigator>
      <Stack.Screen
        options={{
          headerShown: true,
          headerTintColor: '#FFF',
          headerStyle: {
            backgroundColor: colors.primary,
            shadowColor: 'transparent',
          },
        }}
        name="Relations"
        component={RelationsListScreen}
      />
    </Stack.Navigator>
  );
}

export default RelationsStack;

最佳答案

您可以创建一个堆栈导航器,它是您的抽屉导航器的屏幕(当用户通过身份验证时),它具有 HomeRelations 作为屏幕。我在下面的示例中将此导航器称为 AuthenticatedNavigator:

const AuthenticatedStack = createStackNavigator();
// ...

const AuthenticatedNavigator = () => {
  return (
    <AuthenticatedStack.Navigator screenOptions={{headerShown: false}}>
      <AuthenticatedStack.Screen
        name="Home"
        options={{
          icon: 'tachometer-alt',
          category: 'dashboard',
        }}
        component={DashboardStack}
      />
      <AuthenticatedStack.Screen
        name="Relations"
        options={{
          icon: 'address-book',
          category: 'dashboard',
        }}
        component={RelationsStack}
      />
    </AuthenticatedStack.Navigator>
  );
};

function CustomDrawerContent(props) {
  return (
    <DrawerContentScrollView {...props}>
      <DrawerItem
        label="Home"
        onPress={() => props.navigation.navigate('Home')}
      />
      <DrawerItem
        label="Relations"
        onPress={() => props.navigation.navigate('Relations')}
      />
    </DrawerContentScrollView>
  );
}

function App() {
  const authenticated = true;
  return (
    <NavigationContainer>
      <DrawerNavigator.Navigator
        drawerPosition="right"
        drawerStyle={{width: '90%', padding: 0, backgroundColor: 'red'}}
        drawerContent={(props) => <CustomDrawerContent {...props} />}>
        {authenticated ? (
          <DrawerNavigator.Screen
            name="authenticated"
            component={AuthenticatedNavigator}
          />
        ) : (
          <DrawerNavigator.Screen
            name="login"
            options={{headerShown: false, gestureEnabled: false}}
            component={LoginStack}
          />
        )}
      </DrawerNavigator.Navigator>
    </NavigationContainer>
  );
}

我还使用了自定义抽屉内容组件,因此抽屉中的链接在使用创建另一个堆栈导航器的方法后仍然可以正常工作。您可以在此处的文档中阅读有关提供自定义抽屉组件的更多信息:https://reactnavigation.org/docs/drawer-navigator/#providing-a-custom-drawercontent .


我省略了一些代码并将 authenticated 设为硬编码值以简化示例。还要确保从 @react-navigation/drawer 导入 DrawerItemDrawerContentScrollView

关于javascript - 带有标题后退按钮的 React 抽屉导航导航器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64171683/

相关文章:

javascript - 获取页面中所有表单的输入

javascript - Angular 绑定(bind)不起作用

javascript - esLint如何检测哪个方法 'should be placed after'另一个方法?

javascript - 我对 react native 中的导入/导出不明白什么?

react-native - 为什么图像以数字形式导入?

javascript - 选项卡委托(delegate)不工作

Javascript - 当 iFrame SRC 更改时将 DIV 滚动条移动到顶部

reactjs - 自动重新获取不起作用 - RTK 查询

javascript - Cookie 不适用于跨站点配置。我正在使用 React (Next.js) 和 Node.js (Express)

android - 你如何在生产模式下运行 react-native 应用程序?