【问题标题】:Sidebar menu in React Native with react-navigation带有 react-navigation 的 React Native 中的侧边栏菜单
【发布时间】:2017-10-22 09:54:30
【问题描述】:

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

如果没有 react-navigation,这可以通过 react-native-side-bar 等软件包实现,但我想知道是否可以使用 DrawerNavigator 获得完全相同的功能。

但 DrawerNavigator 似乎有菜单按钮。不可以自己配置overlay吗?

编辑

解决方案 1

一种方法是使用

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 />
});

但是可以从所有屏幕AScreen、BScreen 和CScreen 中拖动抽屉,而我只希望它存在于AScreen,因为 StackNavigator 嵌套在 DrawerNavigator 中.

解决方案 2

另一种解决方案是使用

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 }
});

但是AScreen 的标题将在顶部,因为 DrawerNavigator 嵌套在 A 中。

【问题讨论】:

  • 您尝试执行的操作与 DrawerNavigator 默认执行的操作有何不同?查看react-native-side-bar 的示例,他们正在做同样的事情。
  • 完全一样。问题是如何组织导航器。我用一个例子更新了我的问题

标签: javascript node.js reactjs react-native react-navigation


【解决方案1】:

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

这是我的导航器设置:

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}} />)
});

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

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>
    );
  }
}

我希望这会有所帮助。我已经简化了一些代码以主要显示相关位,所以如果您有任何后续问题,请尽管提问!

【讨论】:

  • 谢谢。但我已经尝试过了,我的经验是,在你的所有屏幕中,你都可以通过在屏幕左侧滑动来激活抽屉。我希望抽屉只留在您的Home 中。恐怕react-navigation是不可能的
  • @Jamgreen - 这是我写的一篇文章,展示了如何使用保持打开的抽屉做到这一点:medium.com/@seansy/…。如果您希望能够打开/关闭,您可以将 react-native-reanimated 与 PanGestureHandler 集成,就像 React Navigation 在此处所做的那样:github.com/react-navigation/drawer/blob/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-02
  • 1970-01-01
相关资源
最近更新 更多