反应导航替换操作不起作用



我有一个包含 4 个屏幕的 stackNavigator

const stack = createStackNavigator(
{
S1: {
screen: S1,
},
S2: {
screen: S2,
},
S3: {
screen: S3,
},
S4: {
screen: S4,
},
},
{
initialRouteName: 'Bienvenue',
defaultNavigationOptions: {
header: null,
},
},
);

从 S1 --> S2 --> S3 导航,我想通过替换 S2 屏幕回到 S2,但 navigation.replace 不会替换屏幕,它会在 S2 之上创建一个新屏幕!

Navigation.replace(( 会将您当前的堆栈场景替换为新的场景。因此,如果您在 S3 上,并调用 navigation.replace('S2'(,那么您正在做的是将堆栈中的 S3 替换为 S2,但仍将较早的 S2 保留在堆栈中。这导致...

S1> S2> S2

如果您想返回 S2,如果您在 S3 上,我建议您使用以下方法:

navigation.goBack()

或者,您可以使用S3/S4中的以下内容"弹出"回S2。

navigation.pop('S2')

希望这有帮助。如果我误解了您想要实现的目标,请告诉我。

我找到的解决方案是在参数中传递一个方法 假设我在 S2 中有一个状态:

const [somthing, setSomthing]= useState(false);

导航到 S3 时,我设置了:navigation.navigate('S3', {SetSomthing}}在 S3 中,我得到了参数:const SetSomthing = navigation.getParams('SetSomthing');

当我想回到 S2 时:

setSomthing(true);
navigation.pop();

最新更新