ReactNative与Android原生交互、通信、传参、回调、填坑
在React Native与Android原生之间进行交互时,通常会涉及到以下几个方面:
- 传参:通过React Native传递参数到Android原生。
- 回调:从Android原生向React Native发送数据。
- 通信:建立一个通信桥梁,实现双向数据流动。
- 填坑:处理可能出现的兼容性问题和bug。
以下是一个简单的例子,展示如何从React Native传递参数到Android原生并接收回调。
Android端:
- 创建一个ReactPackage类实现
createNativeModules
和createViewManagers
方法。
public class MyReactPackage implements ReactPackage {
@Override
public List<NativeModule> createNativeModules(ReactApplicationContext reactContext) {
List<NativeModule> modules = new ArrayList<>();
modules.add(new MyNativeModule(reactContext));
return modules;
}
@Override
public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) {
return Collections.emptyList();
}
}
- 创建一个
MyNativeModule
类,继承ReactContextBaseJavaModule
并实现方法。
public class MyNativeModule extends ReactContextBaseJavaModule {
private ReactApplicationContext mContext;
MyNativeModule(ReactApplicationContext context) {
super(context);
mContext = context;
}
@Override
public String getName() {
return "MyNativeModule";
}
@ReactMethod
public void sendDataToNative(String data) {
// 处理数据
// ...
// 回调React Native
mContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
.emit("dataFromNative", data);
}
}
React Native端:
- 在
index.js
中注册你的模块。
import { AppRegistry } from 'react-native';
import { name as appName } from './app.json';
import { NativeModules } from 'react-native';
// 注册原生模块
NativeModules.MyNativeModule.sendDataToNative('Hello from React Native');
// 监听原生模块发送的事件
DeviceEventEmitter.addListener('dataFromNative', (data) => {
console.log(data); // 处理接收到的数据
});
AppRegistry.registerComponent(appName, () => App);
这个例子展示了如何从React Native发送数据到Android原生,并监听来自原生的事件。记得在Android原生代码中注册你的ReactPackage
。
注意事项:
- 确保在原生代码中正确注册了ReactPackage。
- 使用
ReactMethod
注解来标记Java方法,以便它可以从JavaScript调用。 - 使用
DeviceEventEmitter
来监听来自原生的事件。 - 处理好回调和传参时的异步操作。
- 确保处理好版本兼容性问题,比如新旧版本的React Native或JavaScript
评论已关闭