React native 如何从JavaScript调用本机视图方法

React native 如何从JavaScript调用本机视图方法,react-native,react-native-android,React Native,React Native Android,我有一个Android类,它扩展了SimpleViewer类并封装了MapView。使用@ReactProp注释,从React原生JavaScript类设置道具就像一个符咒。但是,我希望能够在视图上调用一个方法,如下所示: public void centerToMyLocation(MapView view) { view.getController().setCenter(myLocation); } 我尝试使用@ReactMethod注释,在JavaScript中获取MapVie

我有一个Android类,它扩展了SimpleViewer类并封装了MapView。使用@ReactProp注释,从React原生JavaScript类设置道具就像一个符咒。但是,我希望能够在视图上调用一个方法,如下所示:

public void centerToMyLocation(MapView view) {
    view.getController().setCenter(myLocation);
}
我尝试使用@ReactMethod注释,在JavaScript中获取MapView的引用,然后在该对象上调用centerToMyLocation方法。但它不工作,我得到mapViewRef.centerToMyLocation不是一个函数错误


如何从呈现本机MapView组件的JavaScript类中调用该方法?

好的,以下内容对我有用:

在JavaScript类的render方法中向本机组件添加一个ref。 使用react原生包中的findNodeHandle方法,将获得的ref作为参数传递。findNodeHandle方法返回一个反应ID,保存它。 使用react native中的UIManager.dispatchViewManagerCommand方法,将react ID作为第一个参数传递。第二个参数是命令id。第三个参数是附加参数,可以为null。 重写ViewManager本机类中的receiveCommand方法,该方法公开组件。在此方法中,处理命令。 示例JS:

componentDidMount() {
    this.mapViewHandle = findNodeHandle(this.mapViewRef);
}

center() {
    UIManager.dispatchViewManagerCommand(this.mapViewHandle, 0, null);
}

render() {
    return (
        <MapView
            ref={(mv) => this.mapViewRef = mv} />
    );
}

好的,以下几点对我很有用:

在JavaScript类的render方法中向本机组件添加一个ref。 使用react原生包中的findNodeHandle方法,将获得的ref作为参数传递。findNodeHandle方法返回一个反应ID,保存它。 使用react native中的UIManager.dispatchViewManagerCommand方法,将react ID作为第一个参数传递。第二个参数是命令id。第三个参数是附加参数,可以为null。 重写ViewManager本机类中的receiveCommand方法,该方法公开组件。在此方法中,处理命令。 示例JS:

componentDidMount() {
    this.mapViewHandle = findNodeHandle(this.mapViewRef);
}

center() {
    UIManager.dispatchViewManagerCommand(this.mapViewHandle, 0, null);
}

render() {
    return (
        <MapView
            ref={(mv) => this.mapViewRef = mv} />
    );
}

下面是另一种方法:

您只需创建一个同级UI本机模块来伴随UI本机组件,如中所示


这应该是一种更简单、更经得起未来考验的方法。

这里有另一种方法:

您只需创建一个同级UI本机模块来伴随UI本机组件,如中所示

这应该是一种更简单、更经得起未来考验的方法。

我找到了丢失的部分NodeHandle,谢谢!丢失的那块被我找到了,谢谢!