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
相关产品推荐
相关产品推荐

