如何在React Native中了解Android中的事件回调

时间:2018-01-24 21:32:36

标签: javascript android react-native react-native-android

我想将一些事件与我的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属性?

0 个答案:

没有答案