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