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

React Native自定义Button组件使用React Navigation报错及跳转无响应问题

问题原因与修复方案

问题原因

  • 第一类navigation未定义报错原因:
    早期封装Button组件时未使用useNavigation钩子,且独立封装的公共组件不属于路由直接渲染的页面组件,React Navigation不会自动给非路由页面组件注入navigation属性,直接读取this.props.navigation就会抛出未定义错误。而直接在HomeScreen写按钮逻辑时,Home是路由注册的页面组件,默认可以拿到注入的navigation属性,所以可以正常运行。
  • 第二类点击无响应原因:
    跳转目标的路由名称不匹配。你在App.js的栈导航中注册的页面名称是NewMedication,但Button组件的跳转逻辑里写的是"New Medication",多了一个空格,路由匹配失败导致没有跳转动作。

修复步骤

  1. 修正跳转路由名称:修改Button.js中的跳转逻辑,将导航参数改为和注册名完全一致的字符串:
// Button.js 中onPress逻辑调整为
onPress={() => {
  navigation.navigate("NewMedication");
}}
  1. 补全Button组件导出:检查Button.js末尾是否添加导出语句,否则HomeScreen无法正常引入组件:
// Button.js 末尾添加
export default Button;
  1. (可选)兼容性兜底:如果遇到useNavigation钩子无法正常获取属性的情况,可以改为从父组件传递navigation属性的方案,修改如下:
// HomeScreen中调用Button时传递属性
<Button navigation={navigation} />

// Button.js中接收属性使用
function Button({navigation}){
  // 去掉useNavigation相关代码,直接使用传入的navigation即可
}

内容的提问来源于stack exchange,提问作者Gabe Cunningham

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 11:27:02