RN与Android 原生交互
一、如何交互
RN --> 原生 原生 --> RN
以下两篇文章都做到了 原生与rn的相互通信 只是侧重点不同
文章一 https://www.jianshu.com/p/38293c58ab8b
文章一 https://blog.csdn.net/jiankeufo/article/details/103063437
文章二 https://blog.csdn.net/xiangzhihong8/article/details/89519722
文章一重点总结
//从原生Activity里面调用该方法,回传数据给RN界面
public static void sendEventToRN(String eventName, @Nullable WritableMap params) {
reactContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class).emit(eventName, params);
}
//acitvity调用方法
WritableMap params = Arguments.createMap();
params.putString("eventProperty", "closeRongActivity");
RNIMModule.sendEventToRN("IMActivityClose", params);;
文章二重点总结
方式一
callBack() {
NativeModules.SomeModule.callbackMethod('params', (result) => {
console.log('callBack ok======>' + result)
};
}
@ReactMethod
public void callbackMethod(String paramsFromJS, Callback ok) {
ok.invoke("callback ok");
}
方式二
promissCallback() {
NativeModules.SomeModule.promiseMethod('params').then((result) => {
console.log('Promiss ok======>' + result)
}).catch((error) => {
console.log('Promiss error======>' + result)
});
}
@ReactMethod
public void promiseMethod(String paramsFromJS, Promise promise){
promise.resolve("promise ok");
promise.reject("promise error");
}
二、参数如何传递 都能传递什么参数
这篇文章是对 问题一在参数传递和书写方式上的深化
https://blog.csdn.net/weixin_33759269/article/details/88037078
async test() {
try {
var {relativeX,relativeY,width,height,} = await RNTest.measureLayout(100, 100);
console.log(relativeX + ':' + relativeY + ':' + width + ':' + height);
} catch (e) {
console.error(e);
}
}
test2(){
RNTest.measureLayout(100,100).then(e=>{
console.log(e.relativeX + ':' + e.relativeY + ':' + e.width + ':' + e.height);
}).catch(error=>{
console.log(error);
});
}
@ReactMethod
public void measureLayout( int tag,int ancestorTag,Promise promise) {
try {
WritableMap map = Arguments.createMap();
map.putDouble("relativeX",1);
map.putDouble("relativeY", 1);
map.putDouble("width", 2);
map.putDouble("height",3);
promise.resolve(map);
} catch (IllegalViewOperationException e) {
promise.reject(e);
}
}