【发布时间】:2021-08-24 02:48:32
【问题描述】:
我在实现一些简单的 react-google-maps 代码时遇到了困难,每当单击标记或关闭信息框时,地图都会将其位置重置为原始位置。我看到我应该将地图组件与更改状态分开渲染,但我不确定如何实现。
感谢任何帮助
import React, {useState} from 'react';
import {Marker, GoogleMap,LoadScript,InfoWindow} from '@react-google-maps/api';
const MapContainer = ({markers}) => {
const [selected, setSelected] = useState<any>({})
const onSelect = (item) => {
setSelected(item)
}
const mapStyles = {
height: "100vh",
width: "100%",
}
const defaultCenter = {
lat: 45.510440, lng: -122.683338
}
const renderMap = () => {
return <>
<div>
<LoadScript
googleMapsApiKey='[GOOGLE API KEY]'>
<GoogleMap
mapContainerStyle={mapStyles}
zoom={13}
center={defaultCenter}
>
{markers.map((marker)=> {
return(
<Marker
position={{
lat: marker.lat,
lng: marker.lng
}}
title={marker.title}
onClick={ () => onSelect(marker) }
/>
)})
}
{
selected.lng &&
<InfoWindow
position={
{
lat: selected.lat,
lng: selected.lng
}
}
onCloseClick={() => setSelected({})}
>
<div>
<h3>{selected.title}</h3>
<p>{selected.info}</p>
</div>
</InfoWindow>
}
</GoogleMap>
</LoadScript>
</div>
</>
}
return renderMap()
}
export default MapContainer; ```
【问题讨论】:
-
请从代码中删除您的 API 密钥,并在 Google API 控制台中进行更改,否则将被其他人使用。
-
天哪,谢谢你看到这个!
-
不客气。我以前也做过类似的事情。不要忘记在控制台中更改它。像这样的网站很可能会因为这样的 API 密钥而被抓取。
标签: reactjs typescript google-maps react-google-maps