小白3天精通跨平台React Native鸿蒙开发:MutilBundle加载方案实现路由跳转Bug:“hotel“ has not been registered未在AppRegistry中注册
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中进行使用。

最终实现效果是:

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



所有评论(0)