RN-原生混合开发之通信

本文详细介绍了React Native(RN)与原生应用之间的通信方式,包括RN调用原生的四种方法:封装Module、Callback回调、Promise通信和直传常量数据,以及原生调用RN的RCTDeviceEventEmitter发射器。通过封装自定义package、设置Callback和Promise处理、重写getConstants方法以及使用RCTDeviceEventEmitter,实现双向通信,确保原生与RN的高效协作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、概要

RN与原生通信个方向,RN传递给原生原生传递给RN。

其中RN传递给原生有四种方式:

  •  封装Module直接调取原生指定方法

        特点:可任意时间传递,由JS调用

        场景:跳转原生对应路由,比如首页点击栏目跳转原生商品列表页

  • Callback 回调方式

        特点:JS调用,原生返回,但CallBack为异步操作,返回时机不确定,如果多次调用的话,会存在问题

        场景:RN执行原生方法,需要原生给回调信息,比如首页点击商品收藏走原生登录

  • Promise 通信方式 

        特点:JS调用,原生返回,但每次使用需要JS调用一次,有成功或失败两种返回状态

        场景:解决Callback无限嵌套的形式,把异步拆为同步,返回状态主要是提供给RN侧做同异步对应处理

  •  直传常量数据

        特点:开发中作用不大

        场景:RN需要从原生拿到一些信息

原生传递给RN的方式只有一种DeviceEventManagerModule.RCTDeviceEventEmitter发射器发射给RN监听方式,特点是可任意时刻传递,由原生主导控制。场景一般是在原生通知RN去展示js的界面,比如底部tab点击需要显示RN首页

二、RN调取原生----封装package(主要是提供package给RN)

1、继承ReactActivity,即声明和RN的入口js对接的入口Activity

class ReactNativeActivity: ReactActivity() {

    /**
     * RN调原生,只需要继承ReactActivity并重写该方法
     * 与项目名称保持一致
     */
    override fun getMainComponentName(): String? {
        return "TestRNProject"
    }
}

2、打包自定义package给RN

package中需要装自定义module,module中写出提供给RN调用原生的方法

class MyNativeModule(reactContext: ReactApplicationContext?) :
    ReactContextBaseJavaModule(reactContext) {

    private var context = reactContext

    /**
     * RN代码需要这个名字来调用该类的方法
     */
    override fun getName(): String {
        return "MyNativeModule"
    }

    /**
     * RN执行Android方法
     */
    @ReactMethod
    fun rnCallNative(msg : String){
        Toast.makeText(context, "RN调用原生拉lalallalalla$msg",Toast.LENGTH_SHORT).show()
    }

    /**
     * RN跳转指定Android界面
     */
    @ReactMethod
    fun startRNActivity(activityName : String, params: ReadableMap){
        var toActivity = Class.forName(activityName)
        var intent = Intent(currentActivity,toActivity)
        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值