ReactNative 自定义Android原生模块的两种形式

ReactNative 自定义Android原生模块的两种形式

1.原生View模块

继承SimpleViewManager<返回View类型>
必须重写getName()createViewInstance(ThemedReactContext context)两个方法,在createViewInstance中返回原生控件
通过@ReactProp注解添加原生属性
通过重写getExportedCustomDirectEventTypeConstants()方法进行回调,例如:
@Override
public Map getExportedCustomDirectEventTypeConstants() {
    return MapBuilder.of(
            NavigationStateChangeEvent.EVENT_NAME, MapBuilder.of("registrationName", "onNavigationStateChange"),
            "onWebScroll123", MapBuilder.of("registrationName", "onWebScroll")

    );
}
将原生模块中的onWebScroll123方法映射为 JS模块的onWebScroll属性,调用方法如下:
假设getName返回值为 “MyView”

<MyView
onWebScroll={()=>{}}>

2.原生Class模块

继承ReactContextBaseJavaModule
必须重写getName()和构造函数
可以认为这个事一个工具类,提供一些RN没有的原生方法
通过@ReactMethod注解添加原生方法,在JS中通过
import {
View,
NativeModules,
NativeAppEventEmitter

} from 'react-native';
const RNVolume = NativeModules.原生中的getName返回值;
RNVolume.注解对应方法名  调用对应方法

3.在原生还可以通过以下方法向Js发送信息

reactContext
            .getJSModule(RCTNativeAppEventEmitter.class)
            .emit(eventName, params);
           //eventName:String JS中通过eventName接收  
           //params:WritableMap 需要传递的参数        

在Js通过接收(eventName=”onVolumeChange”)
NativeAppEventEmitter.addListener('onVolumeChange', () => {})

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

仲少

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值