React Native中React Navigation无法导航的问题求助
问题原因
你的路由配置是根据isSignedIn状态条件渲染不同的屏幕组:未登录时,导航器仅注册SignIn和SignUp屏幕;此时调用navigation.navigate("Home"),导航器中不存在名为Home的屏幕,因此触发错误。
即便你在跳转前更新了登录状态,RootStack可能还未完成重渲染,导航器的屏幕配置仍停留在未登录组,也会导致该问题。
解决方案
方案1:移除屏幕条件渲染,统一注册所有屏幕
将所有屏幕注册到Stack.Navigator中,仅通过initialRouteName控制初始页面,确保导航器始终能识别所有屏幕名称:
export default function RootStack() { const isSignedIn = useAuthStatus(); return ( <Stack.Navigator initialRouteName={isSignedIn ? "Home" : "SignIn"}> {/* 已登录相关屏幕 */} <Stack.Screen name="Home" component={HomeScreen} options={{ header: () => null, animation: "slide_from_bottom", }} /> <Stack.Screen name="Profile" component={ProfileScreen} options={{ header: () => null, animation: "simple_push", }} /> <Stack.Screen name="EmployeeDets" component={EmployeeDetailScreen} options={{ header: () => null, animation: "simple_push", }} /> {/* 未登录相关屏幕 */} <Stack.Screen name="SignIn" component={LoginScreen} options={{ header: () => null, animation: "slide_from_right", }} initialParams={{ heading: "Login", isSignIn: true }} /> <Stack.Screen name="SignUp" component={SignUpScreen} options={{ header: () => null, animation: "slide_from_left", }} initialParams={{ heading: "Signup", isSignIn: false }} /> </Stack.Navigator> ); }
方案2:确保跳转前登录状态已更新且导航器完成重渲染
若坚持使用条件渲染,需保证调用navigation.navigate("Home")前,isSignedIn已变为true且RootStack完成重渲染。可通过监听状态变化实现自动跳转:
// 在LoginScreen组件内 const isSignedIn = useAuthStatus(); const navigation = useNavigation(); useEffect(() => { if (isSignedIn) { navigation.navigate("Home"); } }, [isSignedIn, navigation]);
错误提示翻译
操作'NAVIGATE'及负载{"name":"Home"}未被任何导航器处理。
您是否有名为'Home'的屏幕?
如果您尝试导航到嵌套导航器中的屏幕,请查看相关文档
这仅为开发环境警告,生产环境不会显示。
内容的提问来源于stack exchange,提问作者Kartic Joshi
相关产品推荐
相关产品推荐

