Я считаю, что dangerouslySetInnerHTML
- это способ go об этом, но я go расскажу более подробно о том, почему «опасно» находится в «опасно множестве HTML», и, надеюсь, это поможет вам сделать информированный решение для вашей ситуации.
То, что делает dangerouslySetInnerHTML
, представляет любую строку HTML, переданную ему в элементе DOM.
Например:
<h1 dangerouslySetInnerHTML={{__html: post.title.rendered}} />
(кроме того, обратите внимание, что у клавиши __html
есть два подчеркивания)
Правильно отобразит строку Don’t
в Don't
.
Это все довольно безопасно, однако, если, например, значение post.title.rendered
может быть установлено ненадежной стороной (такой как произвольный пользователь), и если этот произвольный пользователь хотел сделать при некотором повреждении они могут ввести строку, такую как:
<script type="text/javascript>
// Do evil stuff
console.log('I did some evil stuff');
</script>
Этот код будет затем выполняться браузером при загрузке страницы - поскольку React сгенерировал бы следующий DOM:
<h1>
<script type="text/javascript>
// Do evil stuff
console.log('I did some evil stuff');
</script>
</h1>
Итак, учитывая все это, если вы уверены , что значение этого поля находится в пределах вашего элемента управления (и никого другого), и вы также знайте , что в этих строках не будет произвольного кода, затем go вперед и используйте dangerouslySetInnerHTML
.
Однако, если есть вероятность, что кто-то, кроме вас, может манипулировать этим полем, я вместо этого будет выглядеть что-то вроде decode- * 104 3 * -entities - таким образом вы можете получить желаемую презентацию, не ставя под угрозу ваше приложение / пользователей.