You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Native + React Navigation v6 应用首次启动检测问题求助

React Native + React Navigation v6 应用首次启动检测问题求助

大家好,我正在用 React Navigation v6 开发 React Native 应用,现在卡在了检测用户是否首次启动应用这个问题上,想请教下各位大佬的解决办法。

我原本想通过 AsyncStorage 来存储 FIRST_LAUNCH 标记,根据它的值来设置 Stack.Navigator 的 initialRouteName,但发现这个方法行不通——后来才知道 createNativeStackNavigator 是同步执行的,不会等待 AsyncStorage.getItem() 的 Promise 完成。

以下是我的代码:

App.js

const App = () => {
  useEffect(() => {
    SplashScreen.hide();
  },[]);

  return (
    <View style={styles.container}>
      <Routes />
    </View>
  );
};

Routes.js

const Stack = createNativeStackNavigator();

function Routes(){
  const [firstLaunch , setFirstLaunch] = useState(true);

  const checkFirstLaunch = () => {
    AsyncStorage.getItem('FIRST_LAUNCH').then(value => {
      if(value === null){
        AsyncStorage.setItem('FIRST_LAUNCH', 'false');
      }
      setFirstLaunch(false);
    })
  }

  useEffect(() => {
    checkFirstLaunch();
  }, [])

  return(
    <NavigationContainer>
      <Stack.Navigator
        screenOptions={{
          headerShown: false
        }}
        initialRouteName={firstLaunch ? 'Onboarding' : 'TenantHome'}
      >
        <Stack.Screen name="Onboarding" component={OnboardingRoutes} />
        <Stack.Screen name="TenantHome" component={TenantRoutes} />
      </Stack.Navigator>
    </NavigationContainer>
  )
}

export default Routes;

现在的问题是,firstLaunch 始终是 true,导致每次都跳转到引导页,达不到预期效果。

我也看到过一个解决方案,有人建议自己做一个启动屏作为默认首屏,在这个页面里判断后再跳转到引导页或者主页。但我已经通过 LaunchScreen.xib 设置了原生启动屏,并且在 App.js 里用 SplashScreen.hide() 来隐藏它,不知道手动再做一个启动屏是不是好的实践,也不确定这个方案是否适合我的情况。

有没有大佬能给我指点下,该怎么解决这个首次启动检测的问题呀?

备注:内容来源于stack exchange,提问作者Rohan Vaish

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.22 11:58:11