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

时间:2019-12-02 14:31:06

标签: react-native react-navigation

我有一个包含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顶部创建了一个新屏幕!!

2 个答案:

答案 0 :(得分:0)

Navigation.replace()将用新的场景替换当前的堆栈场景。因此,如果您使用的是S3,并调用navigation.replace('S2'),则您正在执行的操作是将堆栈中的S3替换为S2,但仍将早期的S2留在堆栈中。这导致...

S1> S2> S2

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

navigation.goBack()

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

navigation.pop('S2')

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

答案 1 :(得分:0)

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

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

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

当我想回到S2时:

setSomthing(true);
navigation.pop();