ReactNative 与Android 原生传参数 ReadableMap WritableMap

本文详细介绍了React Native应用中,JavaScript与原生模块如何通过ReadableMap和WritableMap进行参数传递,包括从React Native向原生传递数据,以及原生模块向React Native回传数据的过程。同时,探讨了原生模块如何主动向JavaScript发送事件通知。

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

ReadableMap

主要是rn给原生传递参数时使用
(1)rn给原生传递参数

 toast = () => {
    let obj={
      id:1,
      name:"xiaohong"
    };
    NativeModules.TestModules.Toasts(obj);
  };

(2)原生中获取数据

 @ReactMethod
    public void Toasts(ReadableMap msg) {
        ReadableNativeMap map= (ReadableNativeMap) msg;
        HashMap map2=map.toHashMap();
        Toast.makeText(mContext, (String) map2.get("name"), Toast.LENGTH_SHORT).show();
    }

WritableMap

一般用于原生给rn传递参数,这里采用的callback回调
(1)原生给rn回传数据

@ReactMethod
    public void ToastFinished(String msg, Callback callback) {
        Toast.makeText(mContext, msg, Toast.LENGTH_SHORT).show();
        WritableMap map = Arguments.createMap();
        map.putInt("id", 1);
        map.putString("name", "小明");
        WritableArray array = Arguments.createArray();
        array.pushString("哈哈1");
        array.pushString("哈哈2");
        map.putArray("sub",array );
        callback.invoke(map);
    }

(2)rn中接收回传数据

toastFinishCallback = () => {
    NativeModules.TestModules.ToastFinished("调用了原生并带有回调", (result) => {
      this.setState({
        name: result.name
      });
    });
  };

补充

原生模块可以在没有被调用的情况下往 JavaScript 发送事件通知。最简单的办法就是通过RCTDeviceEventEmitter。
原生中发送

@ReactMethod
    public void sendEvent(){
        WritableMap map = Arguments.createMap();
        map.putInt("id", 1);
        map.putString("name", "路人甲");
        mContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
                .emit("sendEvent",map);
    }

js中接收

componentWillMount(){
    DeviceEventEmitter.addListener('sendEvent',(e:Event)=>{
      this.setState({
        sendEvent: e.name
      });
    })
  };
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值