Вы можете использовать ReactDOMServer.renderToString
, см. здесь , чтобы иметь возможность иметь пользовательский всплывающий компонент и отображать его, используя layer.bindPopup
, передавая функцию как проп или любую другую опору, которую вы хотите.
Создайте всплывающий компонент, например:
const Popup = ({ feature }) => {
let popupContent;
if (feature.properties && feature.properties.popupContent) {
popupContent = feature.properties.popupContent;
}
return (
<div>
<p>{`I started out as a GeoJSON ${
feature.geometry.type
}, but now I'm a Leaflet vector!`}</p>
{popupContent}
</div>
);
};
, а затем используйте его внутри onEachFeature
вместе с ReactDOMServer.renderToString
const onEachFeature = (feature, layer) => {
const popupContent = ReactDOMServer.renderToString(
<Popup feature={feature} />
);
layer.bindPopup(popupContent);
};
Правка После предоставления Для получения дополнительной информации я изменил код так:
создайте модальный только для примера и передам его состояние, функцию переключения и выбранную функцию.
итерации по geo json и создание компонента реагирования-листовки FeatureGroup
вместо использования GeoJSON
и прослушивания события onEachFeature
, передавая дочерние реакции-листовки Popup
составная часть. Внутри вы можете иметь кнопку с нужным событием onClick. Этим способом можно решить проблему со статусом c html. Создайте маркер, затем нажмите кнопку и включите модальный режим. Как только вы нажмете кнопку, вы сохраните выбранную ссылку на функцию.
Если вы хотите расширить пример, чтобы охватить все возможные типы геометрии, вы можете проверить свойство геометрии и на основе этого круга визуализации или другого элемента.
Я также обновил демо. Я надеюсь, что это может помочь вам больше сейчас.
Демо