抽屉导航中的返回 header 按钮
Back header button in drawer navigation
我怎样才能在某些屏幕上设置后退按钮,例如 ProfileScreen/ReporterScreen 这样一来,用户点击它就会转到 ContentFlow。
const ProfileNavigator = createStackNavigator({ ProfileScreen });
const ReporterNavigator = createStackNavigator({ ReporterScreen });
const ContentNavigator = createMaterialBottomTabNavigator({ ContentScreen });
const HomeNavigator = createDrawerNavigator({
ContentFlow:ContentNavigator,
ProfileFlow:ProfileNavigator,
ReporterFlow:ReporterNavigator
});
我在 ContentScreen 中为抽屉添加了 header 按钮,但对于其他屏幕,我希望有后退按钮,当按下后退按钮时如何导航到 ContentFlow。
您可以将 headerLeft
设置为 navigationOptions
中的组件。因此,例如,如果你想在 ReporterNavigator
中有一个或多个屏幕,这些屏幕有一个 header 按钮,允许用户导航到 ContentFlow
你可以这样做:
const ReporterNavigator = createStackNavigator({
Screen: {
screen: ScreenComponent,
navigationOptions: ({ navigation }) => {
return {
headerLeft: () => (
<Button
title="go to contentflow"
onPress={() => {
navigation.navigate('ContentFlow');
}}
/>
),
};
},
},
});
如果您想要 ReporterNavigator
的所有屏幕都有按钮,您需要使用 defaultNavigationOptions
而不是 navigationOptions
。请记住,navigationOptions
是在 RouteConfigs
中设置的,而 defaultNavigationOptions
是在 NavigatorConfigs
(https://reactnavigation.org/docs/4.x/stack-navigator/#stacknavigatorconfig) 中定义的。
当你这样做时:
const HomeNavigator = createDrawerNavigator({
ContentFlow: ContentNavigator,
ProfileFlow: ProfileNavigator,
ReporterFlow: ReporterNavigator,
});
导航 object 也得到了传承。因为它是从抽屉导航器向下传递的,所以它保存着该导航器的导航状态。因此,您可以导航到抽屉导航器内的屏幕。
如果您想访问 ReporterNavigator
的导航状态,您可以改为访问匿名函数中的道具 headerLeft
设置为:
// ...
headerLeft: ({navigation}) => (
// etc...
)
// ...
我怎样才能在某些屏幕上设置后退按钮,例如 ProfileScreen/ReporterScreen 这样一来,用户点击它就会转到 ContentFlow。
const ProfileNavigator = createStackNavigator({ ProfileScreen });
const ReporterNavigator = createStackNavigator({ ReporterScreen });
const ContentNavigator = createMaterialBottomTabNavigator({ ContentScreen });
const HomeNavigator = createDrawerNavigator({
ContentFlow:ContentNavigator,
ProfileFlow:ProfileNavigator,
ReporterFlow:ReporterNavigator
});
我在 ContentScreen 中为抽屉添加了 header 按钮,但对于其他屏幕,我希望有后退按钮,当按下后退按钮时如何导航到 ContentFlow。
您可以将 headerLeft
设置为 navigationOptions
中的组件。因此,例如,如果你想在 ReporterNavigator
中有一个或多个屏幕,这些屏幕有一个 header 按钮,允许用户导航到 ContentFlow
你可以这样做:
const ReporterNavigator = createStackNavigator({
Screen: {
screen: ScreenComponent,
navigationOptions: ({ navigation }) => {
return {
headerLeft: () => (
<Button
title="go to contentflow"
onPress={() => {
navigation.navigate('ContentFlow');
}}
/>
),
};
},
},
});
如果您想要 ReporterNavigator
的所有屏幕都有按钮,您需要使用 defaultNavigationOptions
而不是 navigationOptions
。请记住,navigationOptions
是在 RouteConfigs
中设置的,而 defaultNavigationOptions
是在 NavigatorConfigs
(https://reactnavigation.org/docs/4.x/stack-navigator/#stacknavigatorconfig) 中定义的。
当你这样做时:
const HomeNavigator = createDrawerNavigator({
ContentFlow: ContentNavigator,
ProfileFlow: ProfileNavigator,
ReporterFlow: ReporterNavigator,
});
导航 object 也得到了传承。因为它是从抽屉导航器向下传递的,所以它保存着该导航器的导航状态。因此,您可以导航到抽屉导航器内的屏幕。
如果您想访问 ReporterNavigator
的导航状态,您可以改为访问匿名函数中的道具 headerLeft
设置为:
// ...
headerLeft: ({navigation}) => (
// etc...
)
// ...