Я работаю над приложением, используя Leaflet (через react-leaflet). Листовка непосредственно манипулирует DOM. Библиотека реакций-ответчиков не изменяет этого, она просто дает вам компоненты React, которые вы можете использовать для управления вашей лифлетной картой в соответствии с реакцией.Можно ли использовать ReactDOMServer.renderToString в браузере в тех областях, где React напрямую не управляет DOM?
В этом приложении я хочу использовать пользовательские маркеры карт, которые являются divs, содержащими несколько простых элементов. Способ сделать это в Leaflet - установить свойство вашего маркера icon
на DivIcon, в котором вы можете установить свой собственный HTML. Вы установили этот внутренний HTML, установив для свойства Div12con html
строку, содержащую HTML. В моем случае я хочу, чтобы HTML отображался из компонента React.
Для того, чтобы сделать это, кажется, правильный подход заключается в использовании 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 docs:
Этот [renderToString] должен использоваться только на сервере.
Это строгое правило, или оно предназначено только для того, чтобы отговорить людей от обхода эффективного управления ReactDOM DOM?
Я не могу думать о другом (лучшем) способе выполнить то, что мне нужно. Любые комментарии или идеи были бы весьма признательны.
Я не уверен, если это поможет, но: https://facebook.github.io/react/tips/dangerously-set -inner-html.html и http://stackoverflow.com/questions/21285262/react-leave-the-contents-of-a-component-alone – lux
Спасибо, но я на самом деле не пытаюсь вручную установить innerHTML в любом месте. Я просто хочу подготовить строку HTML из компонентов React, которые я могу использовать в листе DivIcon, и мне интересно, есть ли веские причины не использовать 'ReactDOMServer.renderToString()' для этого. Определенно, хорошее напоминание, чтобы быть прилежным в том, чтобы дезинфицировать HTML. –
Да, я полагаю, это полярная противоположность, да? Единственный способ, которым я смог извлечь чистый HTML из рендеринга, - это следующее: http://codepen.io/mikechabot/pen/xVMwgN?editors=0011 Как вы можете видеть, мы можем сбрасывать ' "