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

来源:互联网 发布:linux系统分区详解 编辑:程序博客网 时间:2024/05/16 17:22

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

1.原生View模块

继承SimpleViewManager<返回View类型>
必须重写getName()createViewInstance(ThemedReactContext context)两个方法,在createViewInstance中返回原生控件
通过@ReactProp注解添加原生属性
通过重写getExportedCustomDirectEventTypeConstants()方法进行回调,例如:
@Overridepublic 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', () => {})

原创粉丝点击