单击包含 StackNavigator 的 header 打开抽屉

Open Drawer by clicking in header of containing StackNavigator

这是包含我的抽屉的组件

export default class StackInView extends React.Component {
  render() {

    const Stack = StackNavigator({
      DrawerStack: { screen: DrawerInView }
    }, {
        headerMode: 'float',
      });

    return (
      <View style={{ flex: 1 }}>
        <Stack />
      </View>
    );
  }
}

下面是我定义按钮的地方。我想在屏幕的 navigationOptions 中定义按钮,因为按钮应该只出现在带有抽屉的屏幕上。但是点击按钮不起作用你能帮我吗?

... imports ...


export default class DrawerInView extends React.Component {
    static navigationOptions = {
        title: "Yeah?",
        headerRight: <Button title="Menu" onPress={() => {NavigationActions.navigate("DrawerOpen")}}/>
    }

    constructor(props) {
        super(props);
    }

    render() {
        const Drawer = DrawerNavigator({
            "one": {
                screen: () => {
                    return (<TabsInView select="something" />)
                },
            },
            "two": {
                screen: () => {
                    return (<TabsInView select="something else" />)
                },
            }
        })
        return (
            <View style={{ flex: 1 }}>
                <Drawer />
            </View>
        );
    }
}

不要将 Stack 放入视图中。很难看懂,你把所有的道具都弄坏了。

它不起作用的原因是第二个代码中的 navigationOptions 不是用于抽屉,而是用于第一个代码中的 StackNavigator。所以它不能执行抽屉的 navigation.navigate("DrawerOpen") 因为它是 StackNavigator 的。

我强烈建议您更改应用的层次结构。子Drawer把自己的导航传给父Stack的右键真的很难

然后,它看起来像这样。

const MyStack = StackNavigator({
    Tabs:{ screen: MyTabs, navigationOptions:(props) => ({
        headerRight:
            <TouchableOpacity onPress={() => {props.screenProps.myDrawerNavigation.navigate('DrawerOpen')}}>
                <Text>Open Drawer</Text>
            </TouchableOpacity>
    })}
}
, {navigationOptions:commonNavigationOptions})


const MyDrawer = DrawerNavigator({
    stack1: {
        screen: ({navigation}) => <MyStack screenProps={{myDrawerNavigation:navigation}} />,
    },
    stack2: {
        //more screen
    }
})

您可以像这样点击按钮打开抽屉导航。

<Button title="Menu" onPress ={ ( ) => this.props.navigation.openDrawer()} />