HarmonyOS 鸿蒙Next RN如何在鸿蒙上实现三方桥

发布于 1周前 作者 songsunli 来自 鸿蒙OS

HarmonyOS 鸿蒙Next RN如何在鸿蒙上实现三方桥

RN如何在鸿蒙上,实现三方桥

2 回复
具体通信说明请参考: js给native发消息 js给native发消息需要⽤到TurboModule模块,它可以通过React Native的「Bridge」帮助JavaScript和原⽣代码进⾏交互,并使⽤跨平台的数据格式 JSON 进⾏通讯。下面以Demo中的SampleTurboModule为例,介绍js给Native发消息的流程。

通过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引擎的能力。以下是一个简要说明:

  1. 环境配置

    • 确保已安装HarmonyOS SDK及相应的开发工具(如DevEco Studio)。
    • 配置好项目的依赖项,包括Next RN的鸿蒙适配库。
  2. 桥接机制

    • Next RN通过ArkUI的JSBridge与原生代码进行交互。
    • 实现三方桥时,需利用JSBridge的接口,将第三方库的接口暴露给JS层。
  3. 接口封装

    • 对第三方库进行封装,提供统一的JS调用接口。
    • 在原生代码中实现这些接口,并通过JSBridge注册到JS环境中。
  4. 调用流程

    • 在Next RN的JS代码中,通过封装好的接口调用第三方库的功能。
    • JSBridge将调用请求转发到原生代码,原生代码执行相应的第三方库功能。
    • 结果再通过JSBridge返回给JS层。
  5. 调试与测试

    • 使用DevEco Studio进行调试,确保桥接功能正常。
    • 对关键路径进行性能监控,优化性能瓶颈。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html。

回到顶部