Javascript 使用MST响应导航5身份验证流,而不是;交换;

Javascript 使用MST响应导航5身份验证流,而不是;交换;,javascript,reactjs,react-native,react-navigation,mobx-react-lite,Javascript,Reactjs,React Native,React Navigation,Mobx React Lite,因此,我刚刚将一个项目升级到了他们的版本,其中包括React Navigation 5,它需要将传统推荐的在“Auth”和“App”StackNavigator之间交换的方法更改为一种新的方法,使SwitchNavigator成为冗余的 仅供参考,Ignite Bowser项目本质上是由 React Native React Navigation MobX State Tree TypeScript Reactotron And more! 因此,这一切似乎都很简单,但我无法让实际的导航器在使

因此,我刚刚将一个项目升级到了他们的版本,其中包括React Navigation 5,它需要将传统推荐的在“Auth”和“App”StackNavigator之间交换的方法更改为一种新的方法,使SwitchNavigator成为冗余的

仅供参考,Ignite Bowser项目本质上是由

React Native
React Navigation
MobX State Tree
TypeScript
Reactotron
And more!
因此,这一切似乎都很简单,但我无法让实际的导航器在使用存储在其中一个应用商店中的布尔值并在身份验证方法中调用的操作中将其设置为
true
时进行切换

根据服务器日志和Reactotron提要,身份验证工作正常。之后重新加载应用程序会呈现应用程序导航器,但由于内存已清除,会话实际上无效。所有后续请求都会失败,但应用程序不会切换到Auth navigator

以下是相关的代码片段:

root-navigator.tsx

const RootStack = () => {
  const { pbidStore } = useStores()

  return (
    <Stack.Navigator
      screenOptions={{
        headerShown: false,
        gestureEnabled: true,
        stackPresentation: "modal",
      }}
    >
      {pbidStore.isAuthenticated ? (
        <Stack.Screen
          name="pbidStack"
          component={PbidNavigator}
          options={{
            headerShown: false,
          }}
        />
      ) : (
        <Stack.Screen
          name="authStack"
          component={AuthNavigator}
          options={{
            headerShown: false,
          }}
        />
      )}

    </Stack.Navigator>

在我写下这个问题,开始选择SO标记,并决定使用
mobx-react
vs
mobx-react-lite
或两者兼而有之之后,我想起了上次升级时遇到的问题,在这两种升级之间切换,以及使用
inject
observer

所以我意识到也许我的导航器需要被观察到

导入
mobx-react-lite
并在下面的代码中包装RootStack为我修复了所有问题

const RootStack = observer(() => {
希望这能帮助其他人减轻头痛

总而言之,我很高兴最近对
所做的所有这些更改都对钩子和
功能组件作出了本机的反应,以及它对相关库和最终我的代码库所做的一切,但是,在项目完成之前,不断地学习新的API和重新构建我的项目基础是很累的

const RootStack = observer(() => {