首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有React导航的react Native中的侧边栏菜单

带有React导航的react Native中的侧边栏菜单
EN

Stack Overflow用户
提问于 2017-05-23 00:34:15
回答 1查看 8K关注 0票数 7

我在React Native中使用react-navigation,我想创建一个侧边栏菜单,它作为一个从左到右的覆盖打开,并填充了大约80-90%的宽度。

在没有反应导航的情况下,使用react-native-side-bar之类的包也可以做到这一点,但我想知道我是否可以使用DrawerNavigator获得完全相同的功能。

但DrawerNavigator似乎有菜单按钮。我不能自己配置覆盖吗?

编辑

解决方案1

一种方法是使用

代码语言:javascript
复制
const MyStackNavigator = StackNavigator({
  A: { screen: AScreen },
  B: { screen: BScreen },
  C: { screen: CScreen }
});

const RootNavigator = DrawerNavigator({
  A: { screen: MyStackNavigator },
}, {
  // set content of side bar
  contentComponent: (props) => <Sidebar />
});

但是,它可以从所有屏幕AScreenBScreenCScreen中拖入抽屉,而我只希望它存在于AScreen中,因为StackNavigator嵌套在DrawerNavigator中。

解决方案2

另一种解决方案是使用

代码语言:javascript
复制
const MyDrawerNavigator = DrawerNavigator({
  A: { screen: AScreen },
}, {
  // set content of side bar
  contentComponent: (props) => <Sidebar />
});

const RootNavigator = StackNavigator({
  A: { screen: MyDrawerNavigator },
  B: { screen: BScreen },
  C: { screen: CScreen }
});

但是,由于DrawerNavigator嵌套在A中,因此AScreen的标头将位于顶部。

EN

回答 1

Stack Overflow用户

发布于 2017-05-26 23:25:33

我需要你描述的相同功能,并设法让它与React导航一起工作。基本上,我需要一个完全自定义的抽屉(侧边菜单)。

这是我的导航器设置:

代码语言:javascript
复制
const MainNavigator = DrawerNavigator({
  Home: {
    screen: StackNavigator({
      Search: {
        screen: SearchScreen
      },
      Result: {
        screen: ResultScreen
      }
    })
  },
  Saved: {
    screen: StackNavigator({
      SavedStack: {
        screen: SavedWordsScreen
      }
    })
  },
  About: {
    screen: StackNavigator({
      AboutStack: {
        screen: AboutScreen
      }
    })
  }
},{
  contentComponent: props => (<Drawer navigation={props.navigation} drawerProps={{...props}} />)
});

如您所见,我已经创建了一个包含自定义抽屉内容的抽屉组件。这是该组件的基本设置:

代码语言:javascript
复制
import React, { Component } from 'react';
import { ScrollView, View, Text } from 'react-native';
import { Button } from 'react-native-elements';

class Drawer extends Component {
  render() {
    return (
        <View>
            <Button title="Search" onPress={() => this.props.navigation.navigate('Home')} />
            <Button title="Saved" onPress={() => this.props.navigation.navigate('Saved')} />
            <Button title="About" onPress={() => this.props.navigation.navigate('About')} />
        </View>
    );
  }
}

我希望这能帮到你。我已经简化了一些代码,主要是显示相关的部分,所以如果你有任何后续问题,尽管问吧!

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44117973

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档