我的要求是,我需要显示在MaoView
的标记,当用户点击Map上的任何地方,也需要得到坐标(纬度和经度)的位置,标记被放置。
这是我尝试的:
class Maps extends React.Component {
constructor(props) {
super(props);
this.state = {
region: {
latitude: LATITUDE,
longitude: LONGITUDE,
latitudeDelta: LATITUDE_DELTA,
longitudeDelta: LONGITUDE_DELTA
},
marker: {
latlng: {
latitude: 17.6868,
longitude: 83.2185,
latitudeDelta: LATITUDE_DELTA,
longitudeDelta: LONGITUDE_DELTA
}
}
};
}
onMapPress(e) {
alert("coordinates:" + JSON.stringify(e.nativeEvent.coordinate));
this.setState({
marker: [
{
coordinate: e.nativeEvent.coordinate
}
]
});
}
handleMarkerPress(event) {
const markerID = event.nativeEvent.identifier;
alert(markerID);
}
render() {
return (
<MapView
identifier={"1"}
ref={component => (this.map = component)}
provider={this.props.provider}
style={styles.map}
region={this.state.region}
onPress={this.onMapPress.bind(this)}
//onPress={(event) => this.onMapPress(event)}
provider={PROVIDER_DEFAULT}
mapType="standard"
zoomEnabled={true}
pitchEnabled={true}
showsUserLocation={true}
followsUserLocation={true}
showsCompass={true}
showsBuildings={true}
showsTraffic={true}
showsIndoors={true}
>
<MapView.Marker coordinate={this.state.marker.latlng} />
</MapView>
);
}
}
2条答案
按热度按时间ztmd8pv51#
首先,取一个空数组作为Map标记。
然后将点击位置的坐标作为一个新的标记推送到数组中。最后,在
<MapView>
中,渲染所有标记:每当你点击Map上的任何地方,位置的坐标将被添加到
markers
数组中,当state
被更新时,render()
函数将被再次调用,所有标记将被放置在Map上,包括新的标记。编辑
@FortuneCookie的评论:
在Map上只显示一个标记,当用户点击其他地方时,其他标记会被删除,就像掉下一个别针一样。
简单多了,首先将
markers
数组的状态改为单个marker
。对于
<MapView>
,只需更改其子事件&onPress
。你不必在数组中放置多个标记,然后循环遍历它。相反,你只需将所选位置的坐标作为单个标记放置到
state
,然后(如果标记存在)将其渲染到Map上。它会自动将所选位置设置为状态并删除任何先前选择的位置。ru9i0ody2#
功能组件