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

onPress={()=> navigation.navigate('SignIn')}失效,报错Cannot read property 'navigate' of undefined求助

解决navigation.navigate未定义的跳转错误

这个错误的核心是当前组件没有获取到navigation实例——其他页面正常是因为它们是导航栈直接注册的屏幕组件,会自动接收navigation prop,而你这个组件大概率是嵌套在屏幕里的子组件,或者没正确注入导航上下文。

给你几个可行的解决办法:

1. 函数组件用useNavigation钩子(React Navigation 5及以上版本)

如果你的组件是函数式组件,直接用官方提供的钩子获取导航实例:

import { useNavigation } from '@react-navigation/native';

// 你的欢迎页组件
function WelcomeScreen() {
  const navigation = useNavigation();
  
  return (
    // 替换成你实际的按钮/可点击元素
    <TouchableOpacity onPress={() => navigation.navigate('SignIn')}>
      <Text>前往登录</Text>
    </TouchableOpacity>
  );
}

2. 类组件用withNavigation高阶组件

如果是类组件,用withNavigation包裹组件来注入导航:

import { withNavigation } from '@react-navigation/compat';
import React from 'react';

class WelcomeScreen extends React.Component {
  render() {
    return (
      <TouchableOpacity onPress={() => this.props.navigation.navigate('SignIn')}>
        <Text>前往登录</Text>
      </TouchableOpacity>
    );
  }
}

// 必须用withNavigation包裹后导出
export default withNavigation(WelcomeScreen);

3. 手动传递navigation prop

如果这个组件是某个屏幕组件的子组件,直接从父组件把navigation传过来:
父屏幕组件里:

// 父组件本身是导航栈的屏幕,能拿到navigation
function ParentScreen({ navigation }) {
  return <WelcomeScreen navigation={navigation} />;
}

子组件里接收并使用:

function WelcomeScreen({ navigation }) {
  return (
    <TouchableOpacity onPress={() => navigation.navigate('SignIn')}>
      <Text>前往登录</Text>
    </TouchableOpacity>
  );
}

另外可以检查下你的导航配置,确保SignIn已经正确注册到导航栈里,避免因为路由名称写错导致的问题。

内容的提问来源于stack exchange,提问作者Amir Guliyev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 18:45:18