我有一个现有的地图,它依赖于在v3 Google Maps API中的Marker
的单个实例上使用setPosition
函数。我没有看到从@react-google-maps/api
导出的Marker
组件调用该函数的明显方法。
我想使用onMouseOver
和onMouseOut
事件来显示一个带有(摘要)信息的标记,关于用户在实时谷歌地图上鼠标移动的任何功能。现有的javascript站点运行良好——它使用loadGeoJson
方法向地图添加了大约3500个功能。
文档和示例展示了如何将position
prop传递给render
方法中的Marker实例,但这只提供了一个静态标记位置。
在我当前的javascript
代码中,我在处理onMouseOver
事件时执行以下操作:
function mouseInToRegion(e) {
//...
dataMarker.setLabel({'text': 'some informative string'});
dataMarker.setPosition(e.latLng);
dataMarker.setVisible(true);
}
在上面的片段中,dataMarker
是对在map初始化期间(加载时)创建的单个标记实例的引用。
毫不奇怪,onMouseOut
处理程序除了调用dataMarker.setVisible(false)
之外几乎没有做什么。
如何使用@react-google-maps/api
实现类似的行为?
你可以设置@react-google-maps/api的Marker组件的位置,方法是使用use state在Marker's position parameter
中传递你的位置值。更改此值将把当前标记实例移动到新坐标。
我创建了一个示例代码,其中我有来自json文件的位置数据。我首先迭代并获得每个数据,将每个数据放在一个段落中。然后,每次将鼠标悬停在每个段落上时,它都会传递该位置的数据。然后,您将使用这些数据并更改状态变量markerposition
和place
。然后,它将更新标记和信息窗口,以显示该特定位置的详细信息。
下面是代码片段和示例工作代码:
/*global google*/
import ReactDOM from "react-dom";
import React from "react";
import { GoogleMap, Marker, InfoWindow } from "@react-google-maps/api";
import data from "./data.json";
const defaultLocation = { lat: 40.712775, lng: -74.005973 };
class Map extends React.Component {
state = {
markerposition: defaultLocation,
place: "Default Position - New York"
};
onMouseOverEvent = place => {
this.setState({
markerposition: { lat: place.lat, lng: place.lng },
place: place.name
});
};
render() {
return (
<div>
<GoogleMap
center={defaultLocation}
zoom={8}
mapContainerStyle={{ height: "400px", width: "800px" }}
>
<Marker
//onLoad={onLoad}
position={this.state.markerposition}
>
<InfoWindow options={{ maxWidth: 100 }}>
<span>{this.state.place}</span>
</InfoWindow>
</Marker>
</GoogleMap>
{data.map((place, index) => (
<p key={index} onMouseOver={() => this.onMouseOverEvent(place)}>
{place.name}
</p>
))}
</div>
);
}
}
export default Map;