简体   繁体   English

React Render HTML代码(dangerouslySetInnerHTML?)

[英]React Render HTML Code (dangerouslySetInnerHTML?)

I am building an App where Serverinput is being rendered. 我正在构建一个正在呈现Serverinput的应用程序。

Now I am trying to figure out, how it´s possible to display pure HTML. 现在,我试图弄清楚如何显示纯HTML。 Because now it is only displayed as ...., where it should show an Image. 因为现在它仅显示为..,所以应该在其中显示图像。

The question is, where should one call dangerouslySetInnerHTML() here to display all HTML as requested? 问题是,应在此处何处危险地调用SetInnerHTML()以显示请求的所有HTML?

The Strings are being stores in an Array(messageList) that is being mapped. 字符串存储在要映射的Array(messageList)中。 Userinput is escaped, so theres no problem on that side. 用户输入已转义,因此该侧没有问题。

  let listItems = messageList.map(d => (
   <div >
     <p className={d.senderId + "timestamp"}>{d.time}</p>
     <p className={d.senderId} key={d.idCount} ref={d.idCount}>
       {" "}
        {d.text}{" "}
    </p>
   </div>
 ));

  let gif1 = <img className="gif" alt="" src={gif} />;

  return (
    <div >
      <div dangerouslySetInnerHTML={__html: {listItems}} />
      <ul>{listItems}</ul>

    </div>
  );

Thanks a lot for any help that is given. 非常感谢您提供的任何帮助。

I updated the dangerousHTML where I thought it would work. 我在危险的HTML上进行了更新。 But now it throws - Syntax error: Unexpected token, expected } 但是现在抛出了-语法错误:意外的令牌,预期的}

对于要显示动态内容的每个元素,您都应具有类似的内容

<div dangerouslySetInnerHTML={__html: {yourHtmlContent}} />

How I understood is that Array(messageList) contains a list of markup strings. 我的理解是Array(messageList)包含一个标记字符串列表。

So you just need to join them. 因此,您只需要加入他们。

const messageList = [
  "<h2>Header</h2>",
  "<body>This is body!</body>",
  "<footer>Footer!</footer>"
];

function createMarkup() {
  return { __html: messageList.join("") };
}

function MyComponent() {
  return <div dangerouslySetInnerHTML={createMarkup()} />;
}

It'd display something like this 它会显示这样的东西 在此处输入图片说明

You need to pass a string not an object as you do here. 您需要像这里一样传递字符串而不是对象。
( as it's just an implementation of innerHTML ) 因为它只是innerHTML的实现

{__html: {listItems}}

Full source for completeness. 完整的完整来源。

import React, { Component } from "react";
import { render } from "react-dom";
import "./styles.css";

const messageList = [
  "<h2>Header</h2>",
  "<body>This is body!</body>",
  "<footer>Footer!</footer>"
];

function createMarkup() {
  return { __html: messageList.join("") };
}

function MyComponent() {
  return <div dangerouslySetInnerHTML={createMarkup()} />;
}

class App extends Component {
  constructor() {
    super();
    this.state = {
      name: "React"
    };
  }

  render() {
    return (
      <div>
        <MyComponent />
      </div>
    );
  }
}

render(<App />, document.getElementById("root"));

Working demo. 工作演示。
修改soanswer52225099

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 反应使用危险的SetInnerHTML 渲染带有 html 标签的 json - react use dangerouslySetInnerHTML to render json with html tags 是否可以在不使用 dangerouslySetInnerHtml 的情况下渲染 HTML - Is it possible to render HTML in react without using dangerouslySetInnerHtml 在React中危险地渲染带有JSX表达式的HTML字符串SetInnerHTML() - Render HTML string w/JSX expression in React dangerouslySetInnerHTML() 如何在危险的SetInnerHTML 内容中呈现反应组件? - How to Render a react component inside a dangerouslySetInnerHTML content? 设置危险地设置innerHtml时,如何从ReactJS中的html字符串呈现react组件? - How to render a react component from html string in ReactJS while setting in dangerouslysetinnerHtml? 用React.js组件替换部分html字符串并渲染(没有dangerouslySetInnerHTML) - Replace part of html string with React.js component and render (without dangerouslySetInnerHTML) 在 React JS 中渲染 SVGSVGElement 没有危险地SetInnerHtml - Render SVGSVGElement in React JS without dangerouslySetInnerHtml 用React的危险地设置HTML到SetInnerHTML - draft-to-html with React's dangerouslySetInnerHTML 使用危险的SetInnerHTML在React中插入完整的HTML - Inserting complete HTML in React using dangerouslySetInnerHTML 反应危险SetInnerHTML 只允许特定的 HTML 标签 - React dangerouslySetInnerHTML Only Allow Specific HTML tags
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM