如何在React中渲染HTML

1,997 阅读1分钟

了解如何使用React在DOM中渲染一个HTML字符串,而不需要转义

我遇到了这样的问题--我需要在React应用程序中添加一个HTML字符串,它来自一个所见即所得的编辑器,但是简单地在JSX中添加{myString} ,就把HTML转义了......所以HTML标签被显示给了用户

我是如何解决这个问题的呢?我看到了两个解决方案,基本上。第一个是本地的,第二个是需要一个库。

第一个解决方案:使用dangerouslySetInnerHTML

你可以在一个HTML元素上使用dangerouslySetInnerHTML 属性,在其内容内添加一个HTML字符串。

<div
  dangerouslySetInnerHTML={{
    __html: props.house.description
  }}></div>

记住,它被称为危险是有原因的。在这种情况下,HTML完全没有被转义,它可能会引起XSS问题。

但这也有很好的用例。

第二个解决方案:使用第三方库

有许多库以更简单的方式实现了dangerouslySetInnerHTML 所提供的功能。

其中一个是react-html-parser 库。

请在GitHub上查看该库:https://github.com/wrakky/react-html-parser

警告:在写这篇文章的时候,它在过去两年中没有更新,所以将来可能会出现问题。它对我来说是有效的。

使用哪一个呢?

你可以寻找其他类似的库,但最后我选择使用dangerouslySetInnerHTML 方式。

这个看起来很危险的名字是一个内在的提醒,要注意在正确地将我允许用户输入到该HTML字符串的HTML标签白名单。