HarmonyOS 鸿蒙Next RN如何在鸿蒙上实现三方桥
HarmonyOS 鸿蒙Next RN如何在鸿蒙上实现三方桥
通过TurboModuleRegistry的getEnforcing⽅法在js侧定义TurboModule。注意,代码中必须要输出TurboModuleRegistrySpec对象。
// SampleProject\MainProject\src\bundles\basic\SampleTurboModule.tsx
import { TurboModule, TurboModuleRegistry } from "react-native";
// ⾃定义的TurboModules
export interface SpecSampleTurboModule extends TurboModule {
pushStringToHarmony(arg: string ,id?: number): string;
registerFunction(onComplete: (value: string) => void): void;
doAsyncJob(shouldResolve: boolean): Promise<string>;
rnLog(info: string): void;
}
export default TurboModuleRegistry.getEnforcing<SpecSampleTurboModule>
('SampleTurboModule');
使⽤ Codegen 或⾃⾏实现CPP层的胶⽔代码。
generated
├── RNOHGeneratedPackage.h
├── SpecSampleTurboModule.cpp
└── SpecSampleTurboModule.h
在React的代码中引入SampleTurboModule,并调⽤SampleTurboModule暴露的⽅法,如registerFunction⽅法。
import SampleTurboModule from '../basic/SampleTurboModule';
···
SampleTurboModule.registerFunction((value) => {
// 代码的实现逻辑
});
···
实现SampleTurboModule的原⽣侧代码。
import { TurboModule } from '[@rnoh](/user/rnoh)/react-native-openharmony/ts';
export interface TurboModuleEventData {
param: string
}
export class SampleTurboModule extends TurboModule {
registerFunction(onComplete: (value: string) => void): void {
console.log(`RNOH SampleTurboModule::registerFunction + trigger`);
setTimeout(() => {
onComplete?.('... from native side');
}, 1000);
}
···
// 其余⽅法的实现
}
native给js发消息 DeviceEventEmitter native给js侧发消息,可以通过DeviceEventEmitter发送事件到js侧来实现的。包括两个部分,分别是native侧发送事件,以及js侧监听事件。介绍Native给js发消息的流程。
native侧发送事件 可以通过调⽤RNInstance中的emitDeviceEvent,向js侧发送⾃定义的事件。第⼀个参数是事件的名称,第⼆个参数是事件发送的数据。
// SampleApp\entry\src\main\ets\customView\MarqueeView.ets
this.ctx.rnInstance.emitDeviceEvent("clickMarqueeEvent", { params: { age: 18 } })
js侧监听事件 需要在js代码中添加对应事件的监听与处理。
DeviceEventEmitter.addListener('clickMarqueeEvent', e => {
// 添加事件处理
});
callRNFunction
除了DeviceEventEmitter之外,还可以使⽤callRNFunction完成。
this.ctx.rnInstance.callRNFunction(moduleName: string, functionName: string, args:
unknown[]): void;
该⽅法包括了三个参数,分别是 moduleName:调⽤的模块名 functionName:调⽤的模块的⽅法名 args:需要传的参数
更多关于HarmonyOS 鸿蒙Next RN如何在鸿蒙上实现三方桥的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
HarmonyOS 鸿蒙Next RN在鸿蒙上实现三方桥(即第三方库或框架的桥接)的过程,主要依赖于鸿蒙的ArkUI框架和JavaScript引擎的能力。以下是一个简要说明:
-
环境配置:
- 确保已安装HarmonyOS SDK及相应的开发工具(如DevEco Studio)。
- 配置好项目的依赖项,包括Next RN的鸿蒙适配库。
-
桥接机制:
- Next RN通过ArkUI的JSBridge与原生代码进行交互。
- 实现三方桥时,需利用JSBridge的接口,将第三方库的接口暴露给JS层。
-
接口封装:
- 对第三方库进行封装,提供统一的JS调用接口。
- 在原生代码中实现这些接口,并通过JSBridge注册到JS环境中。
-
调用流程:
- 在Next RN的JS代码中,通过封装好的接口调用第三方库的功能。
- JSBridge将调用请求转发到原生代码,原生代码执行相应的第三方库功能。
- 结果再通过JSBridge返回给JS层。
-
调试与测试:
- 使用DevEco Studio进行调试,确保桥接功能正常。
- 对关键路径进行性能监控,优化性能瓶颈。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html。