Expo Router应用满足显示引导页条件却始终显示首页的问题求助
Expo Router应用满足显示引导页条件却始终显示首页的问题求助
各位好,我现在遇到一个棘手的问题:我基于React Native + Expo Router开发的应用,明明满足显示引导页的条件,但每次启动后都会直接跳转到首页。我已经做了不少排查工作,但还是没定位到问题,想请大家帮忙分析一下。
已验证的内容
- 存储检查逻辑正常:调用
getItem获取@viewedOnboarding时,确实返回null或false,按照业务逻辑此时应该显示引导页 - 状态更新正确:
showOnboarding最终会被设置为true,控制台日志可以明确确认这一点 - 条件渲染逻辑看起来没有问题
- 文件路径正确:
onboarding.tsx确实放在app/onboarding.tsx目录下
当前实际行为
- 无论存储返回的状态如何,应用始终直接加载首页(index)
- 控制台日志显示,在渲染阶段
showOnboarding的值确实是true - 控制台没有任何报错信息
相关代码
import React from "react"; import { View, StyleSheet } from "react-native"; import { GestureHandlerRootView } from "react-native-gesture-handler"; import { SplashScreen, Stack } from "expo-router"; import { useEffect, useState } from "react"; import { getItem } from "../utils/storage"; SplashScreen.preventAutoHideAsync(); export default function Layout() { const [showOnboarding, setShowOnboarding] = useState<boolean | null>(null); console.log("[Layout] Rendering. Current showOnboarding:", showOnboarding); useEffect(() => { console.log("[useEffect] Starting onboarding check"); const checkOnboardingStatus = async () => { try { console.log( "[checkOnboardingStatus] Fetching onboarding status from storage" ); const hasViewed = await getItem<boolean>("@viewedOnboarding"); console.log("[checkOnboardingStatus] Storage returned:", hasViewed); const shouldShowOnboarding = hasViewed !== true; console.log( "[checkOnboardingStatus] Setting showOnboarding to:", shouldShowOnboarding ); setShowOnboarding(shouldShowOnboarding); } catch (error) { console.error( "[checkOnboardingStatus] Error checking onboarding:", error ); console.warn( "[checkOnboardingStatus] Defaulting to show onboarding due to error" ); setShowOnboarding(true); } finally { console.log("[checkOnboardingStatus] Hiding splash screen"); SplashScreen.hideAsync(); } }; checkOnboardingStatus(); }, []); if (showOnboarding === null) { console.log("[Render] showOnboarding is null - returning null"); return null; } console.log("[Render] Final showOnboarding value:", showOnboarding); console.log(`[Render] Will ${showOnboarding ? "show" : "hide"} onboarding`); return ( <GestureHandlerRootView style={styles.container}> <Stack> {showOnboarding ? ( <> <Stack.Screen name="onboarding" options={{ headerShown: false }} /> <Stack.Screen name="+not-found" /> </> ) : ( <Stack screenOptions={{ headerShown: false }}> <Stack.Screen name="index" /> <Stack.Screen name="+not-found" /> </Stack> )} </Stack> </GestureHandlerRootView> ); } const styles = StyleSheet.create({ container: { flex: 1, }, });
我想确认的是:按照我的代码逻辑,当showOnboarding = true时,应该渲染引导页才对,对吧?但实际却没有生效,有没有大佬能帮我找找哪里出了问题?
内容来源于stack exchange
相关产品推荐
相关产品推荐

