如何在用于 React Native Navigation 的 Stack Navigator 中有条件地呈现 header?
How do I conditionally render a header in a Stack Navigator for React Native Navigation?
我希望我的初始页面不包含 header。但是,我希望 header 出现在每个后续页面上。现在我当前的 stackNavigator 看起来像这样:
const AppNavigator = createStackNavigator(
{
HomeScreen: HomePage,
SecondPage: SecondPage,
Account: Account,
About: About,
},
{
initialRouteName: 'HomeScreen',
headerMode: 'none',
navigationOptions: {
headerVisible: false,
},
},
);
export default createAppContainer(AppNavigator);
这是我第二页的基本样板文件:
const SecondPage: () => React$Node = () => {
return (
<>
<StatusBar barStyle="dark-content" />
<View style={styles.body}>
<View style={styles.sectionContainer}>
<Text style={styles.sectionTitle}>This is the Secondpage</Text>
</View>
</View>
</>
);
};
export default SecondPage;
可以在渲染前写在每个组件上
static navigationOptions = ({ navigation }) => {
const { state } = navigation
return {
headerVisible: true // can be true or false
}
}
使用 navigationOptions
可以通过三种方式实现此目的:
1) 直接在定义导航器时:
createStackNavigator({
{
HomeScreen: {
screen : HomePage,
navigationOptions: {header : null}
},
SecondPage: SecondPage,
Account: Account,
About: About,
},
{ ... } //your navigationOptions
})
2) 正如 Shashank Malviya 所说,直接在屏幕内。仅当您不使用功能组件时。
3) Return defaultNavigationOptions
作为函数并使用导航状态:
createStackNavigator({
{ ... }, //your RouteConfigs
{
initialRouteName: 'HomeScreen',
headerMode: 'none',
defaultNavigationOptions : ({navigation}) => navigation.state.routeName === "HomePage" && {header: null}
},
})
我希望我的初始页面不包含 header。但是,我希望 header 出现在每个后续页面上。现在我当前的 stackNavigator 看起来像这样:
const AppNavigator = createStackNavigator(
{
HomeScreen: HomePage,
SecondPage: SecondPage,
Account: Account,
About: About,
},
{
initialRouteName: 'HomeScreen',
headerMode: 'none',
navigationOptions: {
headerVisible: false,
},
},
);
export default createAppContainer(AppNavigator);
这是我第二页的基本样板文件:
const SecondPage: () => React$Node = () => {
return (
<>
<StatusBar barStyle="dark-content" />
<View style={styles.body}>
<View style={styles.sectionContainer}>
<Text style={styles.sectionTitle}>This is the Secondpage</Text>
</View>
</View>
</>
);
};
export default SecondPage;
可以在渲染前写在每个组件上
static navigationOptions = ({ navigation }) => {
const { state } = navigation
return {
headerVisible: true // can be true or false
}
}
使用 navigationOptions
可以通过三种方式实现此目的:
1) 直接在定义导航器时:
createStackNavigator({
{
HomeScreen: {
screen : HomePage,
navigationOptions: {header : null}
},
SecondPage: SecondPage,
Account: Account,
About: About,
},
{ ... } //your navigationOptions
})
2) 正如 Shashank Malviya 所说,直接在屏幕内。仅当您不使用功能组件时。
3) Return defaultNavigationOptions
作为函数并使用导航状态:
createStackNavigator({
{ ... }, //your RouteConfigs
{
initialRouteName: 'HomeScreen',
headerMode: 'none',
defaultNavigationOptions : ({navigation}) => navigation.state.routeName === "HomePage" && {header: null}
},
})