Как привести HTMLElement к элементу React?

#reactjs

Вопрос:

Я работаю над приложением React , которое использует внешнюю библиотеку в Vanilla JS, которая создает элементы DOM, используя document.createElement(...) некоторые из этих данных, которые я хочу вставить в свои элементы React. Если у меня есть простое приложение:

 let sub = React.createElement('p', null, 'Made with React'),
    main = React.createElement('div', null, [sub])

React.render(main, document.getElementById('app'));
 

Он визуализируется вместе с содержимым <p data-reactid=".0.0">Made with React</p> . Если я попробую это document.createElement сделать вместо этого, ничего не отобразится.

 let sub = document.createElement('p');
sub.innerText = 'Not React';
let main = React.createElement('div', null, [sub])

React.render(main, document.getElementById('app'));
 

В настоящее время я нашел обходной путь с помощью dangerouslySetInnerHTML .

 let sub = document.createElement('p');
sub.innerText = 'Not React';
let main = React.createElement('div', {dangerouslySetInnerHTML: {__html: sub.outerHTML}});

React.render(main, document.getElementById('app'));
 

Что делает, но это не кажется безопасным. Как правильно добавлять HTMLElement в качестве дочерних элементов React?

Ответ №1:

dangerouslySetInnerHTML может безопасно использоваться с дезинфицирующими средствами HTML. Для предотвращения доступно множество библиотек XSS .

React.createElement() возвращает виртуальный объект dom javascript, document.createElement() возвращает объект dom. Мы используем объекты javascript для эффективного управления различиями и дорогостоящего обновления dom , мы не хотели бы возвращаться к элементам dom без явной необходимости,