react-native - 从组件内重置 StackNavigator
问题描述
广泛的问题(对于寻找相同解决方案的个人):
我有一个带有基于开关的 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}) 组合,从不存在的屏幕到 screen.options 的问题产生了不同的错误。
我也非常感谢有关如何为 NestedStack 指定从哪个屏幕开始的建议...这只是 {name: 'NestedStack', screen: 'NestedScreen'}??
具体用例: 我真正想要实现的是链接。当应用程序关闭(我通过 Linking.getInitialURL 访问)和应用程序内的相机屏幕(我通过 Linking.addEventListener 收听)时,我有用户打开链接。我已将这两个都放在 MainStack 组件中,以在应用程序从身份验证流切换以及在应用程序内扫描 QR 码时拦截链接。
我必须监听 MainStackScreen 路由的变化,然后在路由完全挂载后将变量 isNavigatorMounted 设置为 true,然后触发我对 Linking.getInitialURL 的检查。
请为一般 StackOverflow 用户解决广泛的问题,但如果这是一种非常低效的方法,请告诉我。
解决方案
提供了这个答案https://discord.com/channels/102860784329052160/288388742929055765/770038660220715028
您不需要 CommonActions 或任何东西。只需将以下内容应用于 StackNavigator 的导航对象:
navigation.reset({
routes: [{ name: 'Home' }, { name: 'NestedStack' }],
});
推荐阅读
- javascript - 将表单显示为按钮的下拉列表(vuetify)
- python - 如何从字符串中删除字符?
- swift - 深入了解 Swift 中的弱引用和无主引用
- javascript - 编写一个函数,它本身可以接受一个参数,然后返回一个值 - 但后来也可以使用新方法进行扩展(类似于 jQuery)
- matplotlib - 坐标轴和标签不在绘图白色区域中
- pythonista - 我在 Pythonista 中将 end_editing() 放在哪里?
- javascript - 为什么 Number.EPSILON 对不同的操作数有不同的作用?
- python - 如何限制 many2many 字段修改主模型?
- java - java和javac的机制是什么?
- python-3.x - 为什么我的函数在调用所述函数时使用原始列表而不是我用于参数的副本?