我正在使用Leaflet开发一个应用程序(通过react-leaflet)。Leaflet 直接操作 DOM。react-leaflet 库不会改变这一点,它只是为您提供 React 组件,您可以使用这些组件以对 React 友好的方式控制您的 Leaflet 地图。
在这个应用程序中,我想使用自定义地图标记,它们是包含一些简单元素的 div。在 Leaflet 中执行此操作的方法是将标记的icon
属性设置为DivIcon,您可以在其中设置自定义 HTML。html
您可以通过将 DivIcon 的属性设置为包含 HTML 的字符串来设置该内部HTML。就我而言,我希望从 React 组件呈现 HTML。
为了做到这一点,似乎正确的方法是使用ReactDOMServer.renderToString()
将我想要在地图标记内的组件呈现为一个字符串,然后我将其设置为html
DivIcon 的属性:
MyMarker.js:
import React, { Component } from 'react'
import { renderToString } from 'react-dom/server'
import { Marker } from 'react-leaflet'
import { divIcon } from 'leaflet'
import MarkerContents from './MarkerContents'
export class MyMarker extends Component {
render() {
const markerContents = renderToString(<MarkerContents data={this.props.data} />)
const myDivIcon = divIcon({
className: 'my-marker',
html: markerContents
})
return (
<Marker
position={this.props.position}
icon={myDivIcon} />
)
}
}
但是,根据React 文档:
这个 [renderToString] 应该只在服务器上使用。
这是一个严格的规则,还是只是为了阻止人们绕过 ReactDOM 对 DOM 的有效管理?
我想不出另一种(更好的)方法来完成我所追求的。任何意见或想法将不胜感激。