使用反应导航导航到嵌套屏幕但使用 reset/replace 操作?
Navigating to a nested screen with react navigation but using a reset/replace action?
我有一个带有多个堆栈导航器(嵌套)的应用程序。 docs 表示您导航到嵌套屏幕,例如:
navigation.navigate('Root', { screen: 'Settings' });
但是,在我的情况下,我不想让用户返回,所以我想使用 reset/replace 操作。你会怎么做?
文档说明了如何重置路线,但没有提供有关如何指定屏幕的信息,例如
navigation.reset({
index: 0,
routes: [{name: 'Root'}], //Where to put screen?
});
编辑 这是我的设置
在顶层,我有 3 个屏幕:
<Stack.Navigator
initialRouteName="HiddenScreen"
screenOptions={{headerShown: false}}>
<Stack.Screen
name="HiddenScreen"
component={HiddenScreen}
/>
<Stack.Screen
name="VideoConferenceIncoming"
component={VideoConferenceIncoming}
}}
/>
<Stack.Screen name="CreateUser" component={CreateUser} />
</Stack.Navigator>
现在 CreateUser 屏幕内部也有一个堆栈:
<Stack.Navigator
initialRouteName={initialRoute}
screenOptions={{
headerShown: false,
}}>
<Stack.Screen name="Step1" component={CreateUserStep1} />
<Stack.Screen name="Step2" component={CreateUserStep2} />
<Stack.Screen name="UserRegistered" component={UserRegistered} />
<Stack.Screen name="ChangePassword" component={ChangePassword} />
<Stack.Screen name="WaitingRoom" component={WaitingRoom} />
</Stack.Navigator>
假设我目前在 VideoConferenceIncoming 屏幕内。我想导航到 CreateUser>Waiting Room 屏幕。但是,我不想让用户返回。
目前我有这个不太正确的解决方案:
navigation.reset({
index: 0,
routes: [{name: 'CreateUser'}],
});
navigation.navigate('CreateUser', {
screen: 'WaitingRoom',
params: {queuePosition: qPos, ticketNumber: ticketNumber},
});
这是不对的,因为来自 WaitingRoom 屏幕的用户仍然可以后退一步。
文档 here 告诉您如何操作。但如果您不熟悉 react-navigation 及其工作原理,可能会有点难以理解。
它说的是您现在可以在使用 reset
时设置嵌套导航器的状态。因此,您可以在您正在设置的导航器状态下指定要导航到的特定屏幕。
所以在你的情况下,重置将如下所示。
navigation.dispatch(
CommonActions.reset({
index: 0,
routes: [
{
name: 'CreateUser',
state: {
routes: [{name: 'WaitingRoom'}],
},
},
],
}),
);
我有一个带有多个堆栈导航器(嵌套)的应用程序。 docs 表示您导航到嵌套屏幕,例如:
navigation.navigate('Root', { screen: 'Settings' });
但是,在我的情况下,我不想让用户返回,所以我想使用 reset/replace 操作。你会怎么做?
文档说明了如何重置路线,但没有提供有关如何指定屏幕的信息,例如
navigation.reset({
index: 0,
routes: [{name: 'Root'}], //Where to put screen?
});
编辑 这是我的设置 在顶层,我有 3 个屏幕:
<Stack.Navigator
initialRouteName="HiddenScreen"
screenOptions={{headerShown: false}}>
<Stack.Screen
name="HiddenScreen"
component={HiddenScreen}
/>
<Stack.Screen
name="VideoConferenceIncoming"
component={VideoConferenceIncoming}
}}
/>
<Stack.Screen name="CreateUser" component={CreateUser} />
</Stack.Navigator>
现在 CreateUser 屏幕内部也有一个堆栈:
<Stack.Navigator
initialRouteName={initialRoute}
screenOptions={{
headerShown: false,
}}>
<Stack.Screen name="Step1" component={CreateUserStep1} />
<Stack.Screen name="Step2" component={CreateUserStep2} />
<Stack.Screen name="UserRegistered" component={UserRegistered} />
<Stack.Screen name="ChangePassword" component={ChangePassword} />
<Stack.Screen name="WaitingRoom" component={WaitingRoom} />
</Stack.Navigator>
假设我目前在 VideoConferenceIncoming 屏幕内。我想导航到 CreateUser>Waiting Room 屏幕。但是,我不想让用户返回。
目前我有这个不太正确的解决方案:
navigation.reset({
index: 0,
routes: [{name: 'CreateUser'}],
});
navigation.navigate('CreateUser', {
screen: 'WaitingRoom',
params: {queuePosition: qPos, ticketNumber: ticketNumber},
});
这是不对的,因为来自 WaitingRoom 屏幕的用户仍然可以后退一步。
文档 here 告诉您如何操作。但如果您不熟悉 react-navigation 及其工作原理,可能会有点难以理解。
它说的是您现在可以在使用 reset
时设置嵌套导航器的状态。因此,您可以在您正在设置的导航器状态下指定要导航到的特定屏幕。
所以在你的情况下,重置将如下所示。
navigation.dispatch(
CommonActions.reset({
index: 0,
routes: [
{
name: 'CreateUser',
state: {
routes: [{name: 'WaitingRoom'}],
},
},
],
}),
);