HarmonyOS 鸿蒙Next Ecosystem Solution ReactNative 4.1.0.400 套件文档未找到鸿蒙原生与RN交互介绍

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

HarmonyOS 鸿蒙Next Ecosystem Solution ReactNative 4.1.0.400 套件文档未找到鸿蒙原生与RN交互介绍

Ecosystem Solution ReactNative 4.1.0.400 套件文档没有找到鸿蒙原生与RN如何交互的介绍,可否提供相关鸿蒙原生与RN如何交互的技术细节介绍?  如RN调用鸿蒙原生端方法,原生如何实现 RN如何实现等

2 回复

js给native发消息
需要用到TurboModule模块,它可以通过React Native的「Bridge」帮助JavaScript和原⽣代
码进⾏交互,并使⽤跨平台的数据格式 JSON 进⾏通讯,参考demo如下:

// 1. 通过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’);

// 2. 使⽤ Codegen 或⾃⾏实现CPP层的胶⽔代码。 generated ├── RNOHGeneratedPackage.h ├── SpecSampleTurboModule.cpp └── SpecSampleTurboModule.h

// 3. 在React的代码中引入SampleTurboModule,并调⽤SampleTurboModule暴露的⽅法,如registerFunction⽅法。 import SampleTurboModule from ‘…/basic/SampleTurboModule’; ··· SampleTurboModule.registerFunction((value) => { // 代码的实现逻辑 });

// 4. 实现SampleTurboModule的原⽣侧代码。 import { TurboModule } from @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); } ··· // 其余⽅法的实现 }<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button>

native给js发消息:

// 1. native侧发送事件 开发者可以通过调⽤RNInstance中的emitDeviceEvent,向js侧发送⾃定义的事件。第⼀个参数是事件的名称,第⼆个参数是事件发送的数据。
// SampleApp\entry\src\main\ets\customView\MarqueeView.ets
this.ctx.rnInstance.emitDeviceEvent(“clickMarqueeEvent”, { params: { age: 18 } })

// 2、 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 Ecosystem Solution中ReactNative 4.1.0.400套件文档未找到鸿蒙原生与RN交互介绍的问题,以下是一些专业解答:

在HarmonyOS鸿蒙Next生态系统中,ReactNative与鸿蒙原生的交互主要通过TurboModule和Fabric两大模块实现。TurboModule负责JavaScript与原生代码的交互,为RN JS应用提供调用系统能力的机制。而Fabric则是React Native的组件渲染系统,负责将组件信息处理后发送给原生OS进行渲染。

此外,鸿蒙化团队还提供了react-native-harmony的tgz包及react-native-harmony-cli的包,这些包对React Native的库进行了HarmonyOS平台的适配,从而实现了RN与鸿蒙原生的无缝对接。

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

回到顶部