使用react-google-maps-api将自定义标记作为React组件

Phi*_*cks 2 google-maps reactjs react-google-maps

我们正在从 转变为google-map-react意味着react-google-maps-api更多原生 Google 地图 API 体验。

在更改之前,我们能够将自定义标记作为 React 组件加载,如下所示:

<GoogleMaps>
  <UserPinContainer lat={userLocation.lat} lng={userLocation.lng}>
    <Tidal.Icon type="UserLocation" text="User" />
  </UserPinContainer>
</GoogleMaps>
Run Code Online (Sandbox Code Playgroud)

从他们的原始 lib 文档中google-map-react,它说:

您可以在地图上渲染很酷的动画反应组件,而不是默认的 Google 地图标记、气球和其他地图组件。

虽然这很棒,但它证明了这个库已经脱离了原生 API...

然而,使用来自react-google-maps-api的新标记API ,React组件是不可能的。他们只期望string | google.maps.Icon | google.maps.Symbol;类型,例如:

<Marker
    icon={{
        path: google.maps.SymbolPath.CIRCLE,
        scale: 7,
    }}
    position={centers[0]}
/>
Run Code Online (Sandbox Code Playgroud)

或者

<Marker position={{ lat: userLocation.lat, lng: userLocation.lng }}>
    <Tidal.Icon img type="UserLocation" text="User" />
</Marker>
Run Code Online (Sandbox Code Playgroud)

我想我可以创建一个真正的自定义标记,例如:

const newMarker = new window.google.maps.Marker(MyComponent)
Run Code Online (Sandbox Code Playgroud)

但没有这样的运气。

对此有什么好的解决方案吗?

小智 12

也许现在回答有点晚了,但如果有帮助的话,您可以使用 OverlayView 组件而不是 Marker,它的工作原理几乎相同,并且您必须将 React 组件作为子组件传递。

  <GoogleMap
    id="overlay-view-example"
    mapContainerStyle={mapContainerStyle}
    zoom={11}
    center={center}
  >
    <OverlayView
      position={center}
      mapPaneName={OverlayView.OVERLAY_MOUSE_TARGET}
    >
      <div style={divStyle}>
        <h1>OverlayView</h1>

        <button
          onClick={onClick}
          type='button'
        >
          Click me
        </button>
      </div>
    </OverlayView>
  </GoogleMap>
Run Code Online (Sandbox Code Playgroud)

这是取自文档的示例: https ://react-google-maps-api-docs.netlify.app/#overlayview