【发布时间】:2021-04-19 17:59:28
【问题描述】:
我有一个带有以下屏幕层次结构的 react native 应用程序
RootNavigator
|
|---AppNavigatorStack
| |--Screen1
| |--Screen2
|
|---LoginNavigatorStack
|--loginScreen
|--forgotPasswordScreen
我一直在尝试为此工作流程创建StackRouter
const options = {
initialRouteName: 'LoginNavigatorStack',
}
const routerConfigOptions = {
routeGetIdList: {},
routeNames: ["AppNavigatorStack", "LoginNavigatorStack"],
type: 'stack',
routeParamList: {}
}
let router = StackRouter(options)
如何在 StackRouter 中配置 routerConfigOptions 以使用 getStateForAction、getInitialState 等功能
创建新状态的示例代码
const action = CommonActions.reset({
index: 0,
routes: [{name: "Screen2"}],
})
let newState = router.getStateForAction(state, action, routerConfigOptions)
state - 我们可以从 NavigationContainer 的 onStateChange 中获取应用程序的当前状态对象
newState的结果是null,因为我还没有在routerConfigOptions中添加Screen1、Screen2、loginScreen、forgotPasswordScreen
我实际上期待一个新的状态,它应该具有导航到 loginScreen 的详细信息。
如何添加所有嵌套屏幕并为此创建 StackRouter?
【问题讨论】:
-
你想做什么?您极不可能需要手动使用路由器
-
我一直在使用
mobx-state-tree进行导航。实际上,我们的应用是在 react-navigation v1 上开发的。我已将其更新为 v5。因此,在 v1 中,StackNavigator中有一个名为 router 的静态属性,现在不可用。所以这是目前的方式。但我还没有看到任何关于此的适当文档。这个问题也和我有关:stackoverflow.com/questions/60326679/… -
要在此级别自定义导航,您需要使用自定义导航,这可能会增加代码的复杂性,您是否考虑过使用动态路由在导航器之间切换?这可能会节省大量编码。
-
由于您正在升级到 v5,因此您也应该借此机会停止使用 mobx 进行导航。使用 React Navigation API 比尝试破解它以与其他状态管理集成要花费更少的精力。你真的不需要这种集成。我们也不推荐或正式支持这样做。
-
所有这些事情都可以在不这样做的情况下以更简单的方式完成。复制状态是一种不好的做法,不仅在 React Navigation 中。我维护 React Navigation,所以我想我可以说出哪些做法是 hack。
标签: react-native react-navigation