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

UI-Kitten Topbar的MenuItem onPress导航报错:Property 'navigation'不存在

解决UI-Kitten Topbar MenuItem跳转时navigation不存在的问题

错误原因很明确:你的TopNavigator组件没有获取到React Navigation的navigation对象,直接调用navigation.navigate自然会报错。下面提供两种靠谱的解决方法:

方法一:使用useNavigation钩子(推荐)

这是React Navigation为函数组件提供的最便捷的获取navigation方式:

  1. 先导入useNavigation钩子:
import { useNavigation } from '@react-navigation/native';
  1. 在TopNavigator组件内部获取navigation对象:
export const TopNavigator = (): React.ReactElement => {
  // 新增这行,获取navigation实例
  const navigation = useNavigation();
  const [menuVisible, setMenuVisible] = React.useState(false);

  const toggleMenu = (): void => {
    setMenuVisible(!menuVisible);
  };

  // ... 其他代码保持不变
};

这样修改后,MenuItem的onPress回调里的navigation.navigate('myScreenName')就能正常触发页面跳转了。

方法二:通过props传递navigation

如果你的TopNavigator是嵌套在某个页面组件中使用的,可以直接把页面的navigation props传递进去:

  1. 修改TopNavigator组件,接收navigation作为props:
// 给组件添加navigation参数
export const TopNavigator = ({ navigation }): React.ReactElement => {
  const [menuVisible, setMenuVisible] = React.useState(false);

  const toggleMenu = (): void => {
    setMenuVisible(!menuVisible);
  };

  // ... 其他代码保持不变
};
  1. 在使用TopNavigator的页面组件中,传递navigation:
// 示例:在HomeScreen页面中使用TopNavigator
export const HomeScreen = ({ navigation }) => {
  return (
    <Layout>
      {/* 把当前页面的navigation传递给TopNavigator */}
      <TopNavigator navigation={navigation} />
      {/* 页面其他内容 */}
    </Layout>
  );
};

额外注意

请确保你的React Navigation路由配置中,已经正确注册了myScreenName这个页面,否则即使拿到navigation,跳转也会提示找不到对应路由。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 20:03:29