#javascript #reactjs #google-maps
#javascript #reactjs #google-карты
Вопрос:
Моя цель — иметь возможность использовать отдельный компонент «Маркеры», который содержит все маркеры для карты. Я планирую использовать чистый компонент для повышения производительности. При выполнении этого я столкнулся с некоторыми проблемами с рендерингом маркеров.
Проблема сводится к приведенному ниже примеру. Маркер не отображается, когда customMarker = true
import React from "react";
import {Map, Marker, GoogleApiWrapper} from 'google-maps-react';
const MyOwnMarker = (props) => <Marker position={{lat:40, lng:-88}}/>
export class MapContainer extends React.Component {
render = () => {
const customMarker = true
return (
<Map
google={this.props.google}
initialCenter={{lat: 40,lng: -88}}
zoom={15}
>
{ customMarker ?
<MyOwnMarker /> :
<Marker position={{lat:40, lng:-88}}/>
}
</Map>
)
}
}
export default GoogleApiWrapper({
apiKey: (process.env.REACT_APP_GOOGLE_API_KEY)
})(MapContainer)
Желаемый результат заключается в том, что when customMarker = true
он должен давать тот же результат, что и when customMarker = false
, поскольку реквизиты идентичны. Прямо сейчас маркер не виден, когда customMarker = true
.
Ответ №1:
Кажется, что когда вы задаете вопрос — ваш разум говорит: «На самом деле, вот как это работает». Вот как я это решил. Это может быть полезно для всех, кто видит этот пост.
В документации google-maps-react они также передают реквизиты «карта» и «google». Они не были учтены. Таким образом, добавление всех неопределенных реквизитов позволило дополнительному компоненту работать.
import React from "react";
import {Map, Marker, GoogleApiWrapper} from 'google-maps-react';
const MyOwnMarker = (props) => React.createElement(Marker,{
position:{lat:40, lng:-88},
...props
})
export class MapContainer extends React.Component {
render = () => {
const customMarker = true
return (
<Map
google={this.props.google}
initialCenter={{lat: 40,lng: -88}}
zoom={15}
>
{ customMarker ?
<MyOwnMarker /> :
<Marker position={{lat:40, lng:-88}}/>
}
</Map>
)
}
}
export default GoogleApiWrapper({
apiKey: (process.env.REACT_APP_GOOGLE_API_KEY)
})(MapContainer)