Может помочь:
Пример кода из проекта создания-реакции-приложения.
import React, { useEffect } from 'react';
import './App.css';
function App() {
const danger = '<script>alert("Hello world!")</script>';
useEffect(() => {
const el = document.querySelector('.danger');
el.appendChild(document.createRange().createContextualFragment(danger));
}, []);
return (
<div className='App'>
<h1>Render and execute script tag</h1>
<div className='danger'></div>
</div>
);
}
export default App;
Может также быть библиотекой для этого:
опасно-установлен- html -контент
import React from 'react'
import InnerHTML from 'dangerously-set-html-content'
function Example {
const html = `
<div>This wil be rendered</div>
<script>
alert('testing')
</script>
`
return (
<InnerHTML html={html} />
)
}
Это также будет работать для скриптов с sr c атрибут set it
Обмен хорошей статьей для получения дополнительной информации: Визуализация опасного содержимого с помощью React
Отображение опасности
Сейчас что происходит, когда вы хотите использовать опасно SetInner HTML, но также должны выполнить любой тег сценария, который находится внутри html? Это противоречит спецификациям HTML5, но если мы немного покопаемся в том, что делает внутренний HTML для инъекции html, мы можем найти что-то интересное:
Указанное значение анализируется как HTML или XML (в зависимости от типа документа), в результате чего объект DocumentFragment представляет новый набор узлов DOM для новых элементов.
Этот DocumentFragment представляет собой облегченную версию документа, он может иметь дочерние узлы, Основное отличие состоит в том, что, поскольку он является фрагментом, фактически не является частью активного / основного документа.
Мы можем создать DocumentFragment с помощью API document.Range.
import React, { useEffect, useRef } from 'react'
// InnerHTML component
function InnerHTML(props) {
const { html } = props
const divRef = useRef(null)
useEffect(() => {
const parsedHTML = document.createRange().createContextualFragment> (html)
divRef.current.appendChild(parsedHTML)
}, [])
return (
<div ref={divRef}></div>
)
}
// Usage
function App() {
const html = `
<h1>Fragment</h1>
`
return (
<InnerHTML html={html} />
)
}
Ссылка на внутренний HTML