如何在 React 中使用静态 HTML

发布日期:2026-07-16 02:47:03   来源 : 杭州电子商务研究院    浏览量 :5
杭州电子商务研究院 发布日期:2026-07-16 02:47:03  
5

介绍

在某些情况下,您可能希望在 React 组件中显示 HTML。HTML 可能来自外部源或您想要向用户显示的文件。

默认情况下,React 不允许您在组件中注入 HTML,原因包括跨站点脚本。但是,在某些情况下,例如 CMS 或所见即所得编辑器,您必须处理原始 HTML。在本指南中,您将了解如何在组件中嵌入原始 HTML。

dangerouslySetInnerHTML 属性

如果您尝试直接在组件内部呈现 HTML 字符串,React 将自动清理它并将其呈现为纯字符串。

      const myHTML = `<h1>John Doe</h1>`;

const App = () => <div>{myHTML}</div>;
    

上述代码不会在标题中呈现字符串“John Doe”。相反,借助 React,完整的字符串(包括 H1 标签)将显示给用户。

要将字符串呈现为 HTML,您需要使用dangerouslySetInnerHTML属性。

      const myHTML = `<h1>John Doe</h1>`;

const App = () => <div dangerouslySetInnerHTML={{ __html: myHTML }} />;
    

dangerouslySetInnerHTML属性用于呈现和注入 DOM 格式的内容到前端。使用此属性被视为一种不良做法,尤其是在处理用户输入时。您应该将任何用户输入视为不安全的,并在将其注入前端之前对其进行清理。

dangerouslySetInnerHTML属性必须是一个具有键__html和 HTML 字符串值的对象。误用dangerouslySetInnerHTML属性可能会使您的应用遭受跨站点脚本攻击。因此,在使用此属性之前,您需要确保 HTML 字符串经过正确清理并且来自可靠来源。您应避免将任何用户接受的输入传递到dangerouslySetInnerHTML属性中。

跨站点脚本 (XSS)

跨站点脚本 (XSS) 攻击允许恶意用户或黑客将不安全的 HTML 代码注入其他最终用户的网站。这允许黑客访问 cookie、本地存储等个人数据。

dangerouslySetInnerHTML 的更安全替代方案

如果 XSS 是主要关注点,则可以使用外部库(如DOMPurify)来清理 HTML 字符串,然后使用dangerouslySetInnerHTML prop将其注入 DOM

要安装 DOMPurify 库,请运行以下命令。

      npm i dompurify
    

您可以在下面看到示例用法。

      import DOMPurify from "dompurify";

const myHTML = `<h1>John Doe</h1>`;

const mySafeHTML = DOMPurify.sanitize(myHTML);

const App = () => <div dangerouslySetInnerHTML={{ __html: mySafeHTML }} />;
    

您还可以配置DOMPurify以仅允许特定的标签和属性。

      // ...
const mySafeHTML = DOMPurify.sanitize(myHTML, {
  ALLOWED_TAGS: ["h1", "p", "span"],
  ALLOWED_ATTR: ["style"],
});
// ...
    

结论

处理来自用户的 HTML 内容时,安全性是首要考虑的问题。您不能信任任何来自用户的输入,即使是维护或编写应用内容的管理员用户也不行。因此,在将 HTML 内容注入 DOM 之前,您应始终使用DOMPurify或任何其他库对其进行清理。请记住,在客户端清理大型 HTML 字符串可能会降低应用性能;幸运的是,DOMPurify也可以在 NodeJS 服务器上使用,因此您应该考虑在后端清理内容。

以上内容来自杭州电子商务研究院推送
关注
关于我们
热门推荐
合作伙伴
免责声明:本站部分资讯来源于网络,如有侵权请及时联系客服,我们将尽快处理
Copyright © 2025-2027 ToB产业网址导航 公安备案 浙公网安备33010602013138号 浙ICP备16025413号-9
支持 反馈 关注 数据