在 React.js 中将字符串转换为真实的 HTML

Posted

技术标签:

【中文标题】在 React.js 中将字符串转换为真实的 HTML【英文标题】:Convert string to real HTML in React.js 【发布时间】:2019-01-03 05:10:55 【问题描述】:

我从一个带有 html 的 API 收到信息。发生的情况是,当我尝试在代码中显示信息时,它会将 HTML 转换为字符串并且不会读取为真正的 HTML。 我搜索了很多,我看到的只是dangerouslySetInnerHTML 的方法,但我也看到了一些关于它的评论和 cmets,如果存在其他解决方案,我不想使用它。另外,我尝试使用Fragmant,但没有成功。

下面是我的 render() 代码:

return (
  <div>
    models.map(model => (
      <a href="/sofa">
        <div className="Parcelas" key=model.id>
          <img
            src="url" + model.image
            className="ParcImage"
            
          />
          <h1>Sofá model.name</h1>
          <h2>
            1,200<span>€</span>
          </h2>

          <p className="Features">model.description</p>

          <button className="Botao">
            <p className="MostraDepois">Ver Detalhes</p>
            <span>+</span>
          </button>
          <img src="../../img/points.svg" className="Decoration"  />
        </div>
      </a>
    ))
  </div>
);

这是一张图片显示:

【问题讨论】:

您能否提供更多信息,例如您如何建模对象的外观或示例屏幕截图? @MaddEye 我编辑了问题 您找到安全的解决方案了吗?一些线程已经推荐了库,但他们没有提到任何关于安全性的内容。 我使用了 Tholle 谈到的以下解决方案。老实说,Idk 关于安全性@Omar 【参考方案1】:

如果字符串中有 html,可以使用dangerouslySetInnerHTML 将其呈现为 html。

return (
  <div>
    models.map(model => (
      <a href="/sofa">
        <div className="Parcelas" key=model.id>
          <img
            src="url" + model.image
            className="ParcImage"
            
          />
          <h1>Sofá model.name</h1>
          <h2>
            1,200<span>€</span>
          </h2>

          <p
            className="Features"
            dangerouslySetInnerHTML= __html: model.description 
          />

          <button className="Botao">
            <p className="MostraDepois">Ver Detalhes</p>
            <span>+</span>
          </button>
          <img src="../../img/points.svg" className="Decoration"  />
        </div>
      </a>
    ))
  </div>
);

【讨论】:

【参考方案2】:

检查您尝试附加到节点的文本是否没有像这样转义:

model: 
  description: '&lt;h1&gt;Hi there!&lt;/h1&gt;'

而不是这个:

model: 
  description: '<h1>Hi there!</h1>'

如果被转义,你应该从你的服务器端转换它。

如果你不能尝试这样的事情:

<p className="Features">model.description.fromCharCode(183)</p>

另一个选项是 ReactHtmlParser 和 unescapingHtml 的组合:

import ReactHtmlParser from "react-html-parser";

let model = [
  
    description: "<h1>Hello There</h1>"
  ,
  
    description: "&lt;h1&gt;Hello There&lt;/h1&gt;"
  
];

function App() 
  function unescapeHTML(html) 
    var escapeEl = document.createElement("textarea");
    escapeEl.innerHTML = html;
    return escapeEl.textContent;
  

  return (
    <div className="App">
      model.map(des => 
        return ReactHtmlParser(unescapeHTML(des.description));
      )
    </div>
  );

【讨论】:

Thw HTML 来自 API 响应,我该怎么做 model: ?此外,fromCharCode(183) 表示错误it's not a function 这只是您可能的模型 json 的一个视图。我用一个可行的解决方案的可运行示例来编辑答案

以上是关于在 React.js 中将字符串转换为真实的 HTML的主要内容,如果未能解决你的问题,请参考以下文章

在 Android 中将字符串转换为 Uri

在 C++ 中将浮点数转换为 std::string

使用 LINQ 在一行代码中将 string[] 转换为 int[]

如何在 React js 中将 HTML 模板呈现为来自 json 的响应

如何在 python 中将 1970 年前的日期转换为纪元? [复制]

在 PySpark 中将 Python Dict 转换为稀疏 RDD 或 DF