Uncaught Error
"hotel" has not been registered. This can happen if: Metro (the local dev server) is run from the wrong
folder. Check if Metro is running, stop it and restart it in the current project.
*A module failed to load due to an error and AppRegistry.registerComponent' wasn't called.

在这里插入图片描述


这是一个典型的React Native应用注册错误,表明你的应用组件没有正确注册到React Native框架中。

错误核心原因分析

这个错误发生在React Native尝试加载名为"hotel"的组件时,发现该组件并未在AppRegistry中注册。错误信息明确指出两个主要可能原因:

1. Metro打包器运行位置错误

Metro(React Native的本地开发服务器)可能从错误的文件夹运行,或者正在为其他应用运行。

2. 模块加载失败导致注册未完成

某个模块在加载过程中出现错误,导致AppRegistry.registerComponent没有被调用。

React Native应用启动机制

在React Native架构中,每个应用都需要一个明确的入口点:

// 正确示例
import { AppRegistry } from 'react-native';
import Hotel from './Hotel';

AppRegistry.registerComponent('hotel', () => Hotel);

注册流程‌:

  • 组件定义‌:创建React组件
  • 注册调用‌:使用AppRegistry.registerComponent注册
  • 原生层调用‌:Native代码通过注册的key查找并渲染组件
  • 关键问题:appKey与appName不匹配

根据参考资料,‌appKey必须与RN工程中AppRegistry.registerComponent注册的appName完全一致‌,否则系统无法找到对应的JavaScript入口组件。

完整解决方案

步骤1:检查注册代码一致性

确保你的注册代码中使用的key完全匹配:

// index.js 或 App.js
AppRegistry.registerComponent('hotel', () => App);

在这里插入图片描述

同时,在原生代码中(Android的MainActivity或iOS的AppDelegate),确保返回的组件名称也是"hotel"。

步骤2:重启Metro服务器

停止当前Metro‌:在终端中按Ctrl+C
切换到正确目录‌:确保在项目根目录
重新启动‌:运行npx react-native start或npm start

步骤3:验证项目结构

确认你的项目结构正确:

你的项目/
├── index.js (注册入口)
├── Hotel.js (酒店组件)
├── package.json
└── ...

在这里插入图片描述


在OpenHarmony与React Native混合开发环境中,还需要注意:

1. React Native for OpenHarmony架构适配

鸿蒙版React Native在新架构基础上进行了鸿蒙化适配,包括:

  • JSI通信层‌:JavaScript与CPP之间的API通信
  • Fabric渲染系统‌:对接ArkUI声明式范式
  • 平台特定代码‌:增加HarmonyOS相关的平台判断

AppRegistry是React Native应用的注册中心,负责:

  • 组件注册表‌:维护所有已注册的组件映射
  • 生命周期管理‌:协调应用启动、运行和停止
  • 错误边界处理‌:捕获和报告运行时错误

当调用AppRegistry.registerComponent(‘hotel’, () => Hotel)时,系统会:

  • 将’hotel’作为key存储在注册表中
  • 关联对应的组件工厂函数
  • 在原生层请求时返回正确的组件实例

建议‌:立即检查你的index.js文件中AppRegistry.registerComponent的第一个参数是否确实是"hotel",这个大小写必须完全匹配。然后彻底重启Metro服务器,确保从项目根目录启动。


接下来通过打包命令npn run harmony将reactNative的代码打包成为bundle,这样可以进行在开源鸿蒙OpenHarmony中进行使用。

在这里插入图片描述
最终实现效果是:

请添加图片描述

欢迎大家加入开源鸿蒙跨平台开发者社区,一起共建开源鸿蒙跨平台生态。

Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐