- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
您好,有什么方法可以将 jsx 组件传递给 bindPopup 函数,以便我可以在按钮单击时推送 redux 命令?
pointToLayer={(
geoJsonPoint: Feature<Point, DeviceProperties>,
latlng,
) => {
const marker = L.marker(latlng);
marker.setIcon(
markerIcon({ variant: geoJsonPoint.properties.relation }),
);
const sddds = (
<div className="font-quicksand">
<h2>{geoJsonPoint.properties.id}</h2>
<h2>{geoJsonPoint.properties.name}</h2>
<p>{geoJsonPoint.properties.description}</p>
<p>{geoJsonPoint.properties.ownerId}</p>
<a
onClick={() => {
dispatch(setDevice(geoJsonPoint.properties));
}}
>
Open device details
</a>
</div>
);
marker.bindPopup(renderToString(sddds));
return marker;
}}
我知道我可以使用 react 传单组件,但这样我不能将 Prop 传递给每个标记选项(我的意思是标记作为图层)。
最佳答案
所以这已经讨论了一点。有an issue在讨论这个的 react-leaflet repo 中,其结论是在 bindPopup
中简单地使用 vanilla JS创建弹出窗口的方法。我根本不喜欢这种解决方案,尤其是当您尝试在弹出窗口中使用非常面向 react 的事件处理程序(如 react-redux 操作)时。
问题React-leaflet geojson onEachFeature popup with custom react component当您使用 react 的 renderToString
时,有人问过您可能已经阅读过代码中的方法。但是您可能已经发现,这不会维护您的 JSX 可能包含的任何交互性或 JS。那里的回答者提出了使用模式而不是弹出窗口的想法,但这并不能完全回答您的问题或真正在基于点层 geojson 的弹出窗口中使用 JSX。
最终,您将无法从 pointToLayer
返回 JSX具有交互性的功能。我认为这将是 react-leaflet 目前没有实现的一个很好的功能。内封pointToLayer
函数,没有直接写全功能 JSX 的好方法。
我玩了一会儿,试图利用 pointToLayer
并保存 feature
每次迭代的状态,然后渲染一个 Marker
与 Popup
从那开始,但它让我思考 - 为什么要打扰?放弃 GeoJSON
组件并呈现您的Marker
和 Popup
s 直接来自 JSON 对象。像这样:
{myGeoJson.features.map((feature, index) => {
return (
<Marker
key={index}
position={L.latLng(feature.geometry.coordinates.reverse())}
>
<Popup>
<button
onClick={() => { yourReduxAction() }}
>
Click meeee
</button>
</Popup>
</Marker>
);
})}
这样,你需要更加努力,手动将你的 GeoJSON 转换成 Marker
与 Popups
,但并不像试图通过从 JSX (<GeoJSON />
) 到 vanilla JS (pointToLayer
) 回到 JSX (<Popup />
) 来向后弯腰那么难。
关于leaflet - 使用 geojson pointToLayer 函数时需要正确的方法在 Leaflet 弹出窗口中呈现 jsx 组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67460092/
我目前正在尝试学习 React,我想使用传单 map (react-leaflet)。 我有两个(点、多边形)GeoJson 对象要显示,它们正在工作,但我想替换默认标记图标。 传单文档 http:/
我正在尝试在 GeoJSON 组件中使用 pointToLayer 参数。我在组件外部(不同的文件)定义了函数 pointToLayer ,但出现了该错误。 Map.js: import {point
我尝试在我的传单 map 中应用 pointTolayer 但它仍然抛出经典图标。代码中有错误。 $.getJSON("https://gist.githubusercontent.com/vassi
当我包含以下代码时,没有出现任何标记,并且控制台中的错误是: Uncaught TypeError: this.callInitHooks is not a function at pointToLa
您好,有什么方法可以将 jsx 组件传递给 bindPopup 函数,以便我可以在按钮单击时推送 redux 命令? pointToLayer={( geoJsonPoint: Feat
我在 Mapbox 中使用此函数与 geoJson 来使用 simplestyle 中的样式标记 var groupThree = new L.LayerGroup(); L.geoJson(laye
我是一名优秀的程序员,十分优秀!