如何初始化 Stack navigator?
How to initialize Stack navigator?
我在每个选项卡上都有一个 Bottom Tabs Navigator that contains a Stack Navigator。
const MainNavigator = createBottomTabNavigator<MainRoutes>();
export interface MainNavProps {
user: User,
signOut: SignOut
}
export function MainNav({ user, signOut }: MainNavProps) {
return (
<MainNavigator.Navigator initialRouteName="DashboardSection" screenOptions={mainScreenOptions}>
<MainNavigator.Screen name="DashboardSection" component={DashboardStack} options={dashboardOptions} />
<MainNavigator.Screen name="HashSection" component={HashStack} options={hashesOptions} />
<MainNavigator.Screen name="AccountSection" component={AccountStack} options={accountOptions} />
</MainNavigator.Navigator>
)
}
我想在这里强调 HashStack
导航器。它由两个屏幕组成,即:
const HashNavigator = createStackNavigator<HashRoutes>();
const screenOptions = ({ navigation, route }: HashStackProps): StackNavigationOptions => {
const pressHandler = () => navigation.navigate("Modify", { title: "modify hashes" });
return {
...sectionScreenOptions,
headerRight: function HeaderLeft() {
return (
route.name === "Index" ?
<Button
marginR-10
iconSource={() => (
<MaterialCommunityIcons name="plus" color={Colors.primaryDarker} size={28} />
)}
style={{ width: 35, height: 35 }}
color={Colors.primaryDarker}
outline
outlineColor={Colors.primaryDarker}
onPress={pressHandler}
/> : <></>
);
},
headerTitle: route.params.title
}
}
export function HashStack() {
return (
<HashNavigator.Navigator initialRouteName="Index" screenOptions={screenOptions} >
<HashNavigator.Screen name="Index" component={Hash} initialParams={{ title: "hashes overview" }} />
<HashNavigator.Screen name="Modify" component={ModifyHash} />
</HashNavigator.Navigator>
);
}
为了简化说明我录了个视频:
当我按下屏幕中间的选项卡 Hashtag
时,它会显示 HashStack
组件。
如您所见,HashStack
ScreenOptions
上的 headerRight
属性 处于活动状态,并显示 plus
按钮。单击 plus
按钮,它会导航到 HashStack
内的 Modify
路线。
然后按选项卡 Dashboard
,这是 Bottom Tabs Navigator
中的第一个 Route
,然后再次按 Hashtag
选项卡,它不会显示初始路线屏幕,即:
<HashNavigator.Screen name="Index" component={Hash} initialParams={{ title: "hashes overview" }} />
问题是,如何在按下另一个 Bottom Tab
时重置 HashNavigator
,以便 Hashtag
选项卡始终显示初始路线 Index
。
您可以在 HashStack
的选项卡屏幕选项中传递 unmountOnBlur: true
const hashesOptions = {
// other options
unmountOnBlur: true
}
export function MainNav({ user, signOut }: MainNavProps) {
return (
<MainNavigator.Navigator initialRouteName="DashboardSection" screenOptions={mainScreenOptions}>
<MainNavigator.Screen name="DashboardSection" component={DashboardStack} options={dashboardOptions} />
<MainNavigator.Screen name="HashSection" component={HashStack} options={hashesOptions} />
<MainNavigator.Screen name="AccountSection" component={AccountStack} options={accountOptions} />
</MainNavigator.Navigator>
)
}
我在每个选项卡上都有一个 Bottom Tabs Navigator that contains a Stack Navigator。
const MainNavigator = createBottomTabNavigator<MainRoutes>();
export interface MainNavProps {
user: User,
signOut: SignOut
}
export function MainNav({ user, signOut }: MainNavProps) {
return (
<MainNavigator.Navigator initialRouteName="DashboardSection" screenOptions={mainScreenOptions}>
<MainNavigator.Screen name="DashboardSection" component={DashboardStack} options={dashboardOptions} />
<MainNavigator.Screen name="HashSection" component={HashStack} options={hashesOptions} />
<MainNavigator.Screen name="AccountSection" component={AccountStack} options={accountOptions} />
</MainNavigator.Navigator>
)
}
我想在这里强调 HashStack
导航器。它由两个屏幕组成,即:
const HashNavigator = createStackNavigator<HashRoutes>();
const screenOptions = ({ navigation, route }: HashStackProps): StackNavigationOptions => {
const pressHandler = () => navigation.navigate("Modify", { title: "modify hashes" });
return {
...sectionScreenOptions,
headerRight: function HeaderLeft() {
return (
route.name === "Index" ?
<Button
marginR-10
iconSource={() => (
<MaterialCommunityIcons name="plus" color={Colors.primaryDarker} size={28} />
)}
style={{ width: 35, height: 35 }}
color={Colors.primaryDarker}
outline
outlineColor={Colors.primaryDarker}
onPress={pressHandler}
/> : <></>
);
},
headerTitle: route.params.title
}
}
export function HashStack() {
return (
<HashNavigator.Navigator initialRouteName="Index" screenOptions={screenOptions} >
<HashNavigator.Screen name="Index" component={Hash} initialParams={{ title: "hashes overview" }} />
<HashNavigator.Screen name="Modify" component={ModifyHash} />
</HashNavigator.Navigator>
);
}
为了简化说明我录了个视频:
当我按下屏幕中间的选项卡 Hashtag
时,它会显示 HashStack
组件。
如您所见,HashStack
ScreenOptions
上的 headerRight
属性 处于活动状态,并显示 plus
按钮。单击 plus
按钮,它会导航到 HashStack
内的 Modify
路线。
然后按选项卡 Dashboard
,这是 Bottom Tabs Navigator
中的第一个 Route
,然后再次按 Hashtag
选项卡,它不会显示初始路线屏幕,即:
<HashNavigator.Screen name="Index" component={Hash} initialParams={{ title: "hashes overview" }} />
问题是,如何在按下另一个 Bottom Tab
时重置 HashNavigator
,以便 Hashtag
选项卡始终显示初始路线 Index
。
您可以在 HashStack
unmountOnBlur: true
const hashesOptions = {
// other options
unmountOnBlur: true
}
export function MainNav({ user, signOut }: MainNavProps) {
return (
<MainNavigator.Navigator initialRouteName="DashboardSection" screenOptions={mainScreenOptions}>
<MainNavigator.Screen name="DashboardSection" component={DashboardStack} options={dashboardOptions} />
<MainNavigator.Screen name="HashSection" component={HashStack} options={hashesOptions} />
<MainNavigator.Screen name="AccountSection" component={AccountStack} options={accountOptions} />
</MainNavigator.Navigator>
)
}