尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
React Native Module 注册流程
React Native 的Native Module 注册流程指的是 JavaScript 层如何调用 Android/iOS 原生代码Java/Kotlin/Obj-C/Swift的过程。整体流程JavaScript | | NativeModules.xxx ↓ React Native Bridge | ↓ Module Registry | ↓ Native Module Provider | ↓ Java/Kotlin/Obj-C Module实例 | ↓ 执行原生方法一、Android Native Module 注册流程以 Android 为例1. 创建 Native Module例如public class MyModule extends ReactContextBaseJavaModule { public MyModule(ReactApplicationContext context) { super(context); } Override public String getName() { return MyModule; } ReactMethod public void hello(String name) { Log.d(RN, Hello name); } }关键getName()决定 JS 调用名字NativeModules.MyModule2. 创建 Module PackageRN 通过 Package 管理 Native Module。public class MyPackage implements ReactPackage { Override public ListNativeModule createNativeModules( ReactApplicationContext context ) { ListNativeModule modules new ArrayList(); modules.add( new MyModule(context) ); return modules; } Override public ListViewManager createViewManagers( ReactApplicationContext context ) { return Collections.emptyList(); } }这里完成Package | └── MyModule实例3. 注册 Package加入MainApplication.java里面Override protected ListReactPackage getPackages() { ListReactPackage packages new PackageList(this) .getPackages(); packages.add( new MyPackage() ); return packages; }流程MainApplication | | ↓ ReactNativeHost | ↓ Package列表4. React Native 初始化时加载App启动ReactInstanceManager | | ↓ createReactContext() | ↓ NativeModuleRegistryBuilder | ↓ 遍历 ReactPackage | ↓ createNativeModules() | ↓ 注册 Module最终形成NativeModuleRegistry { MyModule : MyModule实例 }5. JS调用JS:import { NativeModules } from react-native; NativeModules.MyModule.hello( Tom );调用链JS | | Bridge | | NativeModuleRegistry | | MyModule.hello()二、iOS Native Module 注册流程类似。1. 创建 ModuleObjective-Cinterface MyModule : NSObject RCTBridgeModule end implementation MyModule RCT_EXPORT_MODULE(); RCT_EXPORT_METHOD( hello:(NSString *)name ) { NSLog(Hello %, name); } end关键RCT_EXPORT_MODULE()自动注册。2. Bridge扫描启动RCTBridge | | ↓ Load Native Modules | | ↓ 扫描 RCT_EXPORT_MODULE | | ↓ 生成 Module Registry三、新架构New ArchitectureReact Native 0.68 引入JSI Fabric TurboModule Codegen流程变化旧架构JS | Bridge(JSON) | Native Module新架构JS | JSI | TurboModule | C Binding | NativeTurboModule注册流程例如JS定义interface Spec extends TurboModule { hello(name:string):void; }Codegen生成NativeMyModuleSpec.java NativeMyModuleSpec.h然后TurboModuleManager | | ↓ Module Provider | ↓ MyModule实例四、完整生命周期总结App启动 | | 初始化 ReactContext | | 加载 ReactPackage | | createNativeModules() | | 生成 NativeModuleRegistry | | Bridge/TurboModule 注册 | | JS NativeModules访问 | | 调用 Native 方法 | | 返回结果五、关键类关系AndroidReactApplication | ↓ ReactNativeHost | ↓ ReactInstanceManager | ↓ ReactContext | ↓ NativeModuleRegistry | ↓ NativeModule六、开发中常见问题JS 找不到 Module错误Native module cannot be null检查getName()是否一致return MyModule;JS:NativeModules.MyModulePackage 是否加入packages.add(new MyPackage());是否重新编译 Androidnpx react-native run-android方法没暴露必须ReactMethod public void test() { }否则 JS 看不到。简单理解React Native Module 注册 Native代码创建 Module → Package 提供 Module → Host 注册 Package → ReactContext启动时生成 Registry → JS通过Bridge/JSI找到并调用。如果你是在做React Native 底层源码分析重点应该看ReactInstanceManager → NativeModuleRegistryBuilder → ReactPackage → NativeModuleRegistry这一条链。
RELATED

相关推荐

小牛电动车电池无输出故障排查:从BMS原理到维修实战

小牛电动车电池无输出故障排查:从BMS原理到维修实战

1. 问题引入:当你的小牛“趴窝”时,先别急着送修如果你是一位小牛电动自行车的车主,某天早上准备出门,拧开钥匙,仪表盘正常亮起,但一拧转把,车子纹丝不动,或者干脆连仪表盘都点不亮&…

📅 2026/9/5 21:59:05
ADIC电源设计--为800V应用选择合适的半导体技术--Plecs仿真实现

ADIC电源设计--为800V应用选择合适的半导体技术--Plecs仿真实现

摘要 随着AI数据中心向更高功率密度和更高效能源分配演进,高压中间母线转换器(HV IBC)正逐渐成为下一代云计算供电架构中的关键器件。本文针对横向GaN HEMT、碳化硅MOSFET及SiC Cascode JFET(CJFET)三类宽禁带功率器件,在近1 MHz高频开关条件下用于高压母线转换器的性能展开…

📅 2026/8/23 1:49:25
TOFSense-F激光测距模块:1000Hz高刷新率原理、驱动与STM32/Arduino实战

TOFSense-F激光测距模块:1000Hz高刷新率原理、驱动与STM32/Arduino实战

1. 项目概述:TOFSense-F激光测距模块深度解析最近在做一个需要高精度、高频率测量距离的项目,市面上常见的超声波传感器精度和抗干扰能力有限,而传统的激光测距模块要么体积庞大,要么刷新率跟不上。几经筛选,我最终锁定…

📅 2026/8/23 1:49:26
MORE NEWS

更多资讯

📰

MATLAB P文件逆向工程与加密技术解析

1. MATLAB P文件逆向工程全解析在MATLAB生态中,P文件(Pre-parsed files)长期扮演着双重角色:既是提升代码执行效率的加速器,又是保护知识产权的加密手段。作为从业十余年的MATLAB开发者,我亲历过从早期简单…

📰

技术管理者必读:从财务报表到SaaS指标的商业思维课

这么多年带团队,我经常被同行问一个问题:技术管理者到底要不要懂财务报表?我的回答从来都是一个字:要。而且我觉得,这个问题不是“要不要”,而是“多早开始补”。如果你已经是技术总监、研发VP或者技术合伙…

📰

树莓派 Docker 化网页服务器:从系统镜像到容器化部署

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

PSCAD仿真合空线切空线过电压:合闸电阻抑制与差动保护定制

一条220kV空载线路合闸的瞬间,线路末端电压波形在几个毫秒内冲到相电压峰值的2.1倍;同一回线做切空载操作,断路器断口重击穿一次,过电压直接逼近3倍。这些数字在做过输变电过电压校核的人眼里分量很重——它们决定避雷器的安装位置…

📰

SpringBoot+Vue少儿编程管理系统开发实践

1. 项目背景与核心价值少儿编程教育近年来呈现爆发式增长态势,根据行业调研数据显示,2023年国内少儿编程市场规模已突破百亿元,年复合增长率保持在30%以上。在这个背景下,教育机构对专业化管理系统的需求日益迫切。传统的人工排课…

📰

大模型技术入门:从核心架构到实战部署

1. 大模型技术入门:从零认知到核心架构解析第一次接触大语言模型(LLM)时,我被GPT-3生成的诗歌震惊得说不出话——这完全颠覆了我对AI能力的认知。作为从传统机器学习转型过来的从业者,我花了三个月系统梳理LLM知识体系…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬