我想将一些事件与我的Android模块中的其他数据一起发送到JS部分。我读了https://facebook.github.io/react-native/docs/native-components-android.html#events但是建议的代码对我不起作用,不知道为什么。然后我读了这篇SO帖子Creating Custom UI component for android on React Native. How to send data to JS?,我终于设法从我的Android视图发送onClick事件并在JS中接收回调。但是,当我将事件的名称从onClick更改为其他任何内容时,它将停止工作。好吧,我可以使用onClick名称,但我必须发送一些额外的数据(如在message
属性的官方文档中),但是当我尝试读取该数据时,它是未定义的。这是相应的代码
发送活动:
WritableMap event = Arguments.createMap();
event.putString("url", url);
((ReactContext) getContext()).getJSModule(RCTEventEmitter.class)
.receiveEvent(getId(), "onClick", event);
注册直接事件名称,如此
@Override
public Map<String, Object> getExportedCustomDirectEventTypeConstants() {
return MapBuilder.<String, Object>builder()
.put("onClick",
MapBuilder.of("registrationName", "onClick"))
.build();
}
接收JS:
class MySuperView extends Component {
constructor(props) {
super(props);
this.onClick = this.onClick.bind(this);
}
onClick(event: Event) {
this.props.onClick(event.nativeEvent.url)
}
render() {
return <MyView {...this.props} onClick={this.onClick} />;
}
}
然后在我的应用中使用此组件:
<MySuperView
onClick={(url) => {
console.log(url)
}}
/>
但是,我的日志显示undefined
..我尝试将url
更改为message
,但仍然没有。当我打印整个event.nativeEvent时,它的巨大对象不适合一个logcat消息,因此我无法读取其所有内容。
免责声明:我是Android开发人员,我刚刚开始学习RN + JS,所以也许我缺少一些基本的东西,但是我在官方文档中做了一切,没有任何作用。
所以我的问题是 - 为什么我不能使用与onClick
不同的名称以及为什么我无法像在docs中那样从nativeEvent读取我的url
属性?