代码之家  ›  专栏  ›  技术社区  ›  soalrib

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

  •  2
  • soalrib  · 技术社区  · 8 年前

    我从HTML附带的API接收到信息。结果是,当我试图在代码中显示信息时,它将HTML转换为字符串,而不是作为真正的HTML读取。
    我找了很多,我只看到 dangerouslySetInnerHTML 但我也看到了一些评论和评论,我不想使用它,如果存在另一种解决方案。还有,我试着用 Fragmant 但不是成功。

    下面是我的render()代码:

    return (
      <div>
        {models.map(model => (
          <a href="/sofa">
            <div className="Parcelas" key={model.id}>
              <img
                src={"url" + model.image}
                className="ParcImage"
                alt="sofa"
              />
              <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" alt="points" />
            </div>
          </a>
        ))}
      </div>
    );
    

    这张图片显示:

    I want this in HTML

    2 回复  |  直到 8 年前
        1
  •  2
  •   soalrib    8 年前

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

    return (
      <div>
        {models.map(model => (
          <a href="/sofa">
            <div className="Parcelas" key={model.id}>
              <img
                src={"url" + model.image}
                className="ParcImage"
                alt="sofa"
              />
              <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" alt="points" />
            </div>
          </a>
        ))}
      </div>
    );
    
        2
  •  1
  •   MaddEye    8 年前

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

    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和unescapingtml的组合:

    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>
      );
    }