1
現在、地図コンポーネントを再利用可能コンポーネントにレンダリングしていますが、InfoModalを使用してアイコンを表示することはできますが、私は変更していない標準の赤色のGoogleマップアイコンを作成します。カスタムアイコン自分。私はES6とJSX構文で私が何をする必要があるのか分かりません。私はreact-google-mapsの問題を調べ、これを行う方法(おそらく単純かもしれません)がある場所に最新のものや更新されたものがあるかどうかを調べようとしましたが、反応-google-mapsにカスタムアドオンでのマーカーの作成または正しい形式。react-google-mapsマーカーアイコンのカスタマイズ
import React, { Component } from 'react'
import { withGoogleMap, GoogleMap, Marker, InfoWindow } from 'react-google-maps'
import { DEFAULT_MARKER } from '../../constants/mapDefaults'
const MapGoogleMap = withGoogleMap(props => (
<GoogleMap
defaultZoom={16}
center={props.center}
>
{props.markers.map((marker, index) => (
<Marker
key={index}
position={marker.position}
onClick={() => props.onMarkerClick(marker)}
>
{marker.showInfo && (
<InfoWindow onCloseClick={() => props.onMarkerClose(marker)}>
<div>{marker.infoContent}</div>
</InfoWindow>
)}
</Marker>
))}
</GoogleMap>
))
export default class Map extends Component {
state = {
center: {
lat: 28.3421135,
lng: -80.6149092
},
markers: [
{
position: new google.maps.LatLng(28.3431165, -80.6135908),
showInfo: false,
infoContent: (
<svg
id="Layer_1"
xmlns="http://www.w3.org/2000/svg"
width="16"
height="16"
viewBox="0 0 16 16"
>
<path
d="M3.5 0c-1.7 0-3 1.6-3 3.5 0 1.7 1 3 2.3 3.4l-.5 8c0
.6.4 1 1 1h.5c.5 0 1-.4 1-1L4 7C5.5 6.4 6.5 5 6.5
3.4c0-2-1.3-3.5-3-3.5zm10 0l-.8 5h-.6l-.3-5h-.4L11
5H10l-.8-5H9v6.5c0 .3.2.5.5.5h1.3l-.5 8c0 .6.4 1 1 1h.4c.6 0
1-.4 1-1l-.5-8h1.3c.3 0 .5-.2.5-.5V0h-.4z"
/>
</svg>
)
}, DEFAULT_MARKER
]
}
handleMarkerClick = this.handleMarkerClick.bind(this);
handleMarkerClose = this.handleMarkerClose.bind(this);
handleMarkerClick (targetMarker) {
this.setState({
markers: this.state.markers.map(marker => {
if (marker === targetMarker) {
return {
...marker,
showInfo: true
}
}
return marker
})
})
}
handleMarkerClose (targetMarker) {
this.setState({
markers: this.state.markers.map(marker => {
if (marker === targetMarker) {
return {
...marker,
showInfo: false
}
}
return marker
})
})
}
render() {
return (
<MapGoogleMap
containerElement={
<div style={{ height: `500px` }} />
}
mapElement={
<div style={{ height: `500px` }} />
}
center={this.state.center}
markers={this.state.markers}
onMarkerClick={this.handleMarkerClick}
onMarkerClose={this.handleMarkerClose}
/>
)
}
}
こんにちは、私はちょうどアイコンをカスタマイズしようとしました。私はあなたが 'infoContent'でこれを管理しているのを見て、それをsvgに渡しました。同じものが新しいアイコンを返しません。まだ古いもの。どうやってこれを分かったのか説明してください。ありがとう – Neovea
@Neovea問題はありません。アイコン自体をアイコンプロパティに指定し、urlを文字列として渡すかSVGへのパスとして渡してアイコンをカスタマイズしました。 infoContentはInfoWindow用であり、マーカー自体用ではありません。 'CONSTマーカー= { 位置:{緯度:28.3422、LNG:-80.6112}、 アイコン:{ パス:「M24.5の9H-8.1リットル-2.9-7.7C13.4 1.1 13.2 1 13 1C -0.2 0-0.4 0.1-0.5 0.3L9.6 9H1.5C1 '//これは文字の欠落が原因で正しいパスではありません。 }} //または {位置:{緯度:28.3422、LNG:-80.6112}、 アイコン:importedIcon }] ' – Franklin