【问题标题】:Nesting Stack Navigator with Drawer Navigator使用抽屉导航器嵌套堆栈导航器
【发布时间】:2018-03-26 13:54:05
【问题描述】:

我正在尝试将堆栈导航与抽屉导航一起使用。基本上我希望抽屉一直只出现在一个场景中。我试图这样做,但没有任何反应。我无法理解我做错了什么。

PS:我是 react-native 的新手。

ConversationListScreen.js

import React, { Component } from 'react';
import {
    View,
    Text,
    Button,
    TouchableNativeFeedback,
    Alert,
} from 'react-native';
import Icon from 'react-native-vector-icons/MaterialIcons';
import styles from './styles';

export default class ConversationListScreen extends Component
{
    static navigationOptions = {
        title: 'Hola',
        headerLeft: (
            <TouchableNativeFeedback onPress={() => Alert.alert('Hi!', 'I am a hamburger.')}>
                <View style={styles.toolBackground}>
                    <Icon name="menu" style={ styles.menuIcon }/>
                </View>
            </TouchableNativeFeedback>
        ),
        headerRight: (
            <TouchableNativeFeedback onPress={() => Alert.alert('Hi!', 'What you want to search?')}>
                <View style={styles.toolBackground}>
                    <Icon name="search" style={ styles.searchIcon }/>
                </View>
            </TouchableNativeFeedback>
        )
    };
    render() {
        return (
            <View>
            </View>
        );
    }
}

Drawer.js

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

export default class SideNav extends Component
{
    render() {
        return (
            <View>
                <Text>My first Drawer</Text>
            </View>
        );
    }
}

RouteConfig.js

import { StackNavigator, DrawerNavigator } from 'react-navigation';
import ConversationListScreen from './ConversationListScreen';
import Drawer from './Drawer';
import ChatScreen from './ChatScreen';

export const SideNav = DrawerNavigator({
    Drawer: { screen: Drawer},
});

export const Hola = StackNavigator({
    ConversationList: { screen: ConversationListScreen },
    Drawer: { screen: SideNav },
    Chat: { screen: ChatScreen },
});

【问题讨论】:

    标签: react-native navigation-drawer react-native-android react-navigation stack-navigator


    【解决方案1】:

    这是一种解决方法。我们在 HomeScreenNavigator 中有两个屏幕,这是一个 stackNavigator。在 firstScreen 我们有一个到 secondScreen 的链接。在 secondScreen 中,我们有一个名为 ComponentWidthDrawer 的屏幕的drawerNavigator。这个组件有一个打开抽屉的按钮。我测试了它,它正在工作。

    class FirstComponent extends Component{
      render () {
        return (
          <View>
            <TouchableOpacity onPress={() => 
    this.props.navigation.navigate("SecondScreen")}>
              <Text>Go to Second Component</Text>
            </TouchableOpacity>
          </View>
        )
      }
    }
    class ComponentWidthDrawer extends Component{
      render () {
        return (
          <View>
            <TouchableOpacity onPress={() => this.props.navigation.navigate("DrawerOpen")}>
              <Text>Open Menu</Text>
            </TouchableOpacity>
          </View>
        )
      }
    }
    const SecondComponent = DrawerNavigator({
      Drawer: {
        screen: ComponentWidthDrawer,
        navigationOptions: {
          drawerLabel: 'Videos'
        },
      }
    })
    
    const HomeScreenNavigator = StackNavigator(
      {
        FirstScreen : {
          screen: FirstComponent,
          navigationOptions:{
            header: false
          }
        },
        SecondScreen: {
          screen: SecondComponent,
          navigationOptions:{
            header: false
          }
        }
      }
    );
    

    【讨论】:

    • 我的 RouteConfig 位于一个名为 RouteConfig.js 的文件中,我希望将所有路由保存在一个地方。我的情况是ConversationListScreen 是默认主屏幕。我想要一个汉堡菜单,可以打开和关闭抽屉,但该菜单不应该在任何其他页面上。
    • 您可以在 navigationOptions 中配置标题,因此显示或隐藏汉堡图标不应阻止您使用它。并且第一个嵌套屏幕可以是默认将您带到那里的对话列表
    【解决方案2】:

    我猜你不能在堆栈导航器中使用抽屉导航器作为场景。您应该在要使用的组件中导入 SideNav 并尝试将其渲染为组件

    【讨论】:

    • 如果我将它作为组件导入,那么如何显示和隐藏侧边栏?你能给我看一个sn-p吗?
    • 你是对的。我忘记了这个。看看我在这里发布的工作解决方案。
    【解决方案3】:

    我遇到了类似的问题,我最终做的是使用 this drawer component 并将其包裹在您想要访问它的组件周围。例如,如果您只想从 ConversationListScreen 访问它,则将其导出为 &lt;Drawer&gt;&lt;ConversationListScreen&gt;&lt;/Drawer&gt;

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-08-21
      • 2019-12-13
      • 1970-01-01
      • 2018-12-09
      • 2020-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多