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

React Native中React Navigation无法导航的问题求助

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 09:48:22