gpt4 book ai didi

reactjs - 使用 React-leaflet version3 的传单 map 上的自定义按钮

转载 作者:行者123 更新时间:2023-12-05 02:40:42 25 4
gpt4 key购买 nike

我是 React typescript 的新传单学习者。想要在 map 上创建自定义按钮。单击按钮将出现一个弹出窗口。我看到了很多示例,但它们都是基于旧版本的,我也尝试创建自己的示例,但没有成功。该文档也没有提供太多帮助。即使是功能性自定义控件组件也对我的应用程序非常有效。对此的任何帮助将不胜感激。这是我的代码,

Custom button

import React, { Component } from "react";
import { useMap } from "react-leaflet";
import L, { LeafletMouseEvent, Map } from "leaflet";

class Description extends React.Component<{props: any}> {
createButtonControl() {
const MapHelp = L.Control.extend({
onAdd: (map : Map) => {
const helpDiv = L.DomUtil.create("button", ""); //how to pass here the button name and
//other property ?

//a bit clueless how to add a click event listener to this button and then
// open a popup div on the map

}

});
return new MapHelp({ position: "bottomright" });
}

componentDidMount() {
const { map } = this.props as any;
const control = this.createButtonControl();
control.addTo(map);
}

render() {
return null;
}
}

function withMap(Component : any) {
return function WrappedComponent(props : any) {
const map = useMap();
return <Component {...props} map={map} />;
};
}

export default withMap(Description);

The way I want to call it

<MapContainer
center={defaultPosition}
zoom={6}
zoomControl={false}
>
<Description />


<TileLayer
attribution="Map tiles by Carto, under CC BY 3.0. Data by OpenStreetMap, under ODbL."
url="https://cartodb-basemaps-{s}.global.ssl.fastly.net/light_all/{z}/{x}/{y}.png"
/>
<ZoomControl position={'topright'}/>
</MapContainer>

最佳答案

你很接近。坚持使用类组件,您只需要继续创建按钮实例即可。您可以在 Description 上使用 Prop 来确定您的按钮将说什么和做什么:

      <Description
title={"My Button Title"}
markerPosition={[20.27, -157]}
description="This is a custom description!"
/>

在您描述的 createButtonControl 中,您几乎就完成了。你只需要填写一点:

createButtonControl() {
const MapHelp = L.Control.extend({
onAdd: (map) => {
const helpDiv = L.DomUtil.create("button", "");
this.helpDiv = helpDiv;
// set the inner content from the props
helpDiv.innerHTML = this.props.title;

// add the event listener that will create a marker on the map
helpDiv.addEventListener("click", () => {
console.log(map.getCenter());
const marker = L.marker()
.setLatLng(this.props.markerPosition)
.bindPopup(this.props.description)
.addTo(map);

marker.openPopup();
});

// return the button div
return helpDiv;
}
});
return new MapHelp({ position: "bottomright" });
}

Working codesandbox

有一百万种方法可以改变这一点,但希望这能让你继续下去。

关于reactjs - 使用 React-leaflet version3 的传单 map 上的自定义按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68414583/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com