【发布时间】:2021-10-23 02:42:36
【问题描述】:
背景
对于 React Leaflet v2,有一个 NPM 插件react-leaflet-control,它允许您创建任何类型的控件并将其放入 react-leaflet 控件容器中。显然,随着 RL-v3 的引入,随着 API 的变化,这在 v3 中不再适用。我想创建一个自定义控件包装器以允许我在其中放置任何类型的 React 节点。
当前状态
我目前的代码可以工作......但没有。我从这个 Stack Overflow 帖子中的示例中提取:React Leaflet V3 Custom Control 这让我获得了创建自定义控件的 99% 解决方案。但是,我的用例是地图上的工具栏,带有可交互的按钮(用于指定活动工具的颜色)。然而,有了这段代码,我就有了这个功能,但是因为每次渲染都会创建一个新控件,所以工具提示会在失去其锚元素时闪烁。
期望的行为
我想要一个允许用户选择工具以在地图上执行操作的工具栏(想想老派leaflet-draw。为了提供反馈,我希望按钮在工具处于活动状态时改变颜色,而对于 UX,我想要工具提示来描述按钮的操作。
实际行为
工具栏存在,用户可以选择工具并且有 UI 反馈,但是,工具提示会丢失它们的锚元素,因为在选择工具时,每次渲染时都会删除并重新添加控件。
代码沙盒
【问题讨论】:
-
你的方法不是很'react-ey'。 Reacts 的主要工作是快速重新渲染 HTML。 Leaflet 也可以使用
DomUtil渲染 HTML,但它的设计目的不是为了反复重新渲染它。你能不使用 L.control 只用 HTML 编写你的控件吗? -
100% 有效它不是很反应,因为它直接在 React 之外操作 DOM。我明白了。我喜欢它在 Leaflet 的“控制”结构中的原因是利用该样式在地图上定位,而不是在屏幕上使用其他 CSS 绝对定位。我已经用不同的反应组件做到了这一点,但希望它与地图集成。可能无法再使用 v3
标签: reactjs leaflet react-leaflet react-leaflet-v3