从组件中重置StackNavigator



BROAD问题(针对搜索相同解决方案的个人(:

我有一个带有基于交换机的StackNavigator("MainStack"(的应用程序。我想将MainStack重置为{index:1,routes:[{name:"Home",name:"NestedStack"}]},我想从MainStack组件(见下文(内的调用它

function App() {
return (
<NavigationContainer>
<Stack.Navigator>
{
anon ?
<Stack.Screen name="Auth" component={AuthScreen} />
<Stack.Screen name="MainStack" component={MainStackScreen} />
}
</Stack.Navigator>
</NavigationContainer>
);
}
const MainStack = createStackNavigator();
function MainStackScreen({navigation, route}) {

*** An event occurs here ***
*** And I'd like to respond to the event with a navigation.reset() ***
return (
<MainStack.Navigator>
<MainStack.Screen name="Home" component={Home} />
<MainStack.Screen name="NestedStack" component={NestedStackScreen} />
</MainStack.Navigator>
);
}

我尝试了几种不同的navigation.dispatch({…CommonActions.reset({}(,target}(组合,从不存在的屏幕到屏幕问题产生了不同的错误。options.

我也非常感谢关于如何为NestedStack指定从哪个屏幕开始的建议。。。这只是{name:"NestedStack",screen:"NestetScreen"}吗??

具体用途案例:我真正想要实现的是链接。我让用户在应用程序关闭时打开链接(我通过Linking.getInitialURL访问(,并从应用程序内的摄像头屏幕打开链接(通过Linking.addEventListener收听(。我将这两个链接都放在MainStack组件中,以便在应用程序从身份验证流切换时以及在应用程序内扫描二维码时拦截链接。

我必须听取MainStackScreen路由中的更改,然后在路由完全安装后将变量isNavigatorMounted设置为true,然后触发我对Linking.getInitialURL.的检查

请解决一般StackOverflow用户的广泛问题,但如果这是一种效率非常低的方法,请告诉我。

此答案由https://discord.com/channels/102860784329052160/288388742929055765/77003860220715028 提供

您不需要CommonActions或任何东西。只需将以下内容应用于StackNavigator的导航对象:

navigation.reset({
routes: [{ name: 'Home' }, { name: 'NestedStack' }],
});

最新更新