我有一个扩展SimpleViewManager
类的Android类,并封装了MapView
。从React Native JavaScript类设置道具就像一个魅力(使用@ReactProp
注释)。但是,我希望能够在视图上调用方法,如下所示:
public void centerToMyLocation(MapView view) {
view.getController().setCenter(myLocation);
}
我尝试使用@ReactMethod
注释,在JavaScript中获取MapView
的参考,然后在该对象上调用centerToMyLocation
方法。但它不起作用(我得到mapViewRef.centerToMyLocation is not a function
错误)。
如何从我呈现原生MapView
组件的JavaScript类中调用该方法?
答案 0 :(得分:8)
好的,以下内容对我有用:
ref
方法中向本机组件添加render
。findNodeHandle
包中的react-native
方法,将获得的ref
作为参数传递。 findNodeHandle
方法返回一个反应ID,保存它。UIManager.dispatchViewManagerCommand
中的react-native
方法,将反应ID作为第一个参数传递。第二个参数是命令ID。第三个参数是附加参数(可以是null
)。receiveCommand
本机类中的ViewManager
方法,该方法公开组件。在此方法中,处理命令。示例JS:
componentDidMount() {
this.mapViewHandle = findNodeHandle(this.mapViewRef);
}
center() {
UIManager.dispatchViewManagerCommand(this.mapViewHandle, 0, null);
}
render() {
return (
<MapView
ref={(mv) => this.mapViewRef = mv} />
);
}
示例Java:
@Override
public void receiveCommand(MapView view, int commandId, @Nullable ReadableArray args) {
super.receiveCommand(view, commandId, args);
if (commandId == 0) {
if (mMyLocation != null) {
view.getController().setCenter(mMyLocation);
}
}
}
答案 1 :(得分:0)