Android原生向js发送数据:
为了向js传递事件我们需要在原生页面用到RCTDeviceEventEmitter,它是原生模块和js之间的一个事件发射器;
//eventName是要发射的事件的名称,params为事件携带的参数;
WritableMap params = Arguments.createMap();
params.putString("message",msg.obj.toString());
private void sendEvent(ReactContext reactContext,String eventName, @Nullable WritableMap params) {
reactContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
.emit(eventName, params);
}
其中:
RCTDeviceEventEmitter deviceEventEmitter = reactContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
deviceEventEmitter.emit(eventName, params) //发射事件
//js接受数据, js为参数名(message), events为传递的数据events
DeviceEventEmitter.addListener('名称',(events) ={使用数据events});
componentDidMount() {
//注册扫描监听,
DeviceEventEmitter.addListener('onScanningResult',this.onScanningResult);
}
onScanningResult = (e)=> {
this.setState({
scanningResult: e.result,
});
}
//在组件销毁的时候,移除监听
componentWillUnmount(){
DeviceEventEmitter.removeListener('onScanningResult',this.onScanningResult);//移除扫描监听
}
查考文档:
事件发射器-详解