首页 > 解决方案 > React Navigation - Auth Flow - 错误指定的孩子在Android上已经有一个父母

问题描述

我正在尝试使用 react-navigation 在本机反应上实现 Auth Flow,因为它在文档(https://reactnavigation.org/docs/auth-flow)中完成。但是当状态更改以显示 HomeNavigator 时,我收到以下错误(仅在 Android 上,在 iOS 上有效):

The specified child already has a parent. You must call removeView() on the child's parent first.
...
onCreateView (ScreenStackFragment.kt:129)
...
// App.tsx
return (
    <ReduxProvider store={rootStore}>
          <NavigationContainer ref={navigationRef}>
            <RootNavigator />
          </NavigationContainer>
    </ReduxProvider>
  );

// RootNavigator.tsx
export const RootNavigator = selectConnect(selectCurrentUser)((props: Partial<CurrentUserProps>) => {
  return (
    <Stack.Navigator
      screenOptions={{
        headerShown: false,
        gestureEnabled: true,
      }}>
      {props.isAuthenticated ? (
        <Stack.Screen name="HomeNavigator" component={HomeNavigator} />
      ) : (
        <Stack.Screen name="LoginNavigator" component={LoginNavigator} />
      )}
    </Stack.Navigator>
  );
});
// Note : selectConnect is just a custom function to use connect (redux) with selector

我可以找到解决此问题的任何方法,因此将不胜感激。
谢谢。

环境
React-Native:0.66.0
@react-navigation/native:6.0.4
@react-navigation/native-stack:6.2.2
运行操作系统:Android(在 iOS 上运行良好)

编辑:突发新闻,这似乎是由于@react-navigation/drawer(需要react-native-reanimated),但现在两者都在我的项目中未使用(这仍然是一个问题,因为我很快就会需要这些)。
@react-navigation/drawer: 6.1.6
react-native-reanimated: 2.3.0-beta.2(唯一支持 react-native 0.66.0 的版本)

最小项目重现:https ://github.com/LaGregance/ErrorAuthFlowReactNavigation

标签: androidreact-nativereact-navigationreact-navigation-stack

解决方案


对于那些面临同样问题的人,我通过将 react-native 降级到版本 0.65.1 并将 react-native-reanimated 降级到 2.2.2 来临时修复它所以显然这是 react-native-reanimated 的问题。

我现在将参考:https ://github.com/software-mansion/react-native-reanimated/issues/2501


推荐阅读