Reactjs React Native:没有为键X定义路由必须是Y或Z之一
我正在开发具有以下路由结构的应用程序:Reactjs React Native:没有为键X定义路由必须是Y或Z之一,reactjs,react-native,react-navigation,react-navigation-stack,Reactjs,React Native,React Navigation,React Navigation Stack,我正在开发具有以下路由结构的应用程序: root // tab navigator A // stack navigator A1 A2 -> B B // stack navigator B1 B2 B3 -> C C 根导航由选项卡导航器组成。该选项卡导航器A和B上的两条路由包含堆栈导航器 我试图让它,每当用户点击B标签,B堆栈复位,所以用户总是服务B1时,B堆栈挂载 我想我可以通过将以下事件添加到用户单击以导航到“我的选项卡
root // tab navigator
A // stack navigator
A1
A2 -> B
B // stack navigator
B1
B2
B3 -> C
C
根导航由选项卡导航器组成。该选项卡导航器A和B上的两条路由包含堆栈导航器
我试图让它,每当用户点击B标签,B堆栈复位,所以用户总是服务B1时,B堆栈挂载
我想我可以通过将以下事件添加到用户单击以导航到“我的选项卡组件是自定义的”的图标中来实现这一点:
this.props.navigation.dispatch(StackActions.reset({
index: 0,
key: null,
actions: [NavigationActions.navigate({ routeName: 'B' })],
}));
然而,这引发了:
Error: There is no route defined for key B.
Must be one of: 'A','A1','A2'
这欺骗了我。有人知道如何通过编程方式强制B堆栈重置为0吗?任何建议都会有帮助
// versions:
"react-navigation": "^4.0.10",
"react-navigation-stack": "^1.9.4",
"react-navigation-tabs": "^2.5.6",
这很粗略,但我可以通过将B路由器保存到全局名称空间来运行它:
const BStack = createStackNavigator(
{
B1: { screen: B1, },
B2: { screen: B2, },
B3: { screen: B3, },
},
{
initialRouteName: 'B1',
}
)
BStack.navigationOptions = ({navigation}) => {
global.B_NAVIGATOR = navigation; // could be stored in redux or elsewhere...
}
然后在我的根级别选项卡导航器中,我倾听用户是否单击了B选项卡。如果是这样,我只需使用.poptoop重置B堆栈导航器:
这很粗略,但我可以通过将B路由器保存到全局名称空间来运行它:
const BStack = createStackNavigator(
{
B1: { screen: B1, },
B2: { screen: B2, },
B3: { screen: B3, },
},
{
initialRouteName: 'B1',
}
)
BStack.navigationOptions = ({navigation}) => {
global.B_NAVIGATOR = navigation; // could be stored in redux or elsewhere...
}
然后在我的根级别选项卡导航器中,我倾听用户是否单击了B选项卡。如果是这样,我只需使用.poptoop重置B堆栈导航器:
这可能与构建设置有关,我会在expo中得到这一点,尽管我已经明确定义了路线,并且它似乎重新加载了js。停止启动expo会触发一个更完整的构建,新的路由将生效。这可能与构建设置有关,我会在expo中得到它,尽管我已经明确定义了路由,并且它似乎会重新加载js。停止启动expo会触发一个更完整的构建,新路线将生效。我是在移除StackNavigator并没有完全重新启动应用程序后得到这个消息的。我的解决方案是停止应用程序并运行expo start-c,它会在启动时清除一些缓存。我是在移除StackNavigator并没有完全重新启动应用程序后得到的。我的解决方案是停止应用程序并运行expo start-c,它会在启动时清除一些缓存。相关:相关:在没有expo的情况下,必须执行相同的操作,重新启动,即使在弹出的项目中,重新加载似乎也不起作用。我不得不重新构建应用程序以反映这些变化。在这里,没有expo,我也必须这样做,重新启动,即使在弹出的项目中,重新加载似乎也不起作用。我不得不重新构建应用程序以反映这些变化。