我在处理facebook的ReactJS时遇到了麻烦。每当我使用ajax并想要显示html数据时,ReactJS将其显示为文本。(见下图)

数据通过jquery Ajax的成功回调函数显示。

$.ajax({
   url: url here,
   dataType: "json",
   success: function(data) {
      this.setState({
           action: data.action
      })
   }.bind(this)
});

有没有什么简单的方法把它转换成html?我应该如何使用ReactJS?


当前回答

你也可以从html-react-parser中使用Parser()。 我也用过。连接共享。

其他回答

对于那些还在尝试的人,npm安装react-html-parser

当我安装它时,它的周下载量是123628次。

import ReactHtmlParser from 'react-html-parser'

<div>{ReactHtmlParser(htmlString)}</div>

默认情况下,React会转义HTML以防止XSS(跨站脚本)。如果你真的想渲染HTML,你可以使用dangerlysetinnerhtml属性:

<td dangerouslySetInnerHTML={{__html: this.state.actions}} />

React强制使用这种有意为之的繁琐语法,这样您就不会意外地将文本呈现为HTML并引入XSS错误。

如果你提前知道你想呈现的字符串中有哪些标签;例如,如果在创建字符串时只允许某些标记;解决这个问题的一个可能的方法是使用Trans实用程序:

import { Trans } from 'react-i18next'
import React, { FunctionComponent } from "react";

export type MyComponentProps = {
    htmlString: string
}

export const MyComponent: FunctionComponent<MyComponentProps> = ({
  htmlString
}) => {
  return (
    <div>
      <Trans
        components={{
          b: <b />,
          p: <p />
        }}
      >
        {htmlString}
      </Trans>
    </div>
  )
}

然后你就可以一如既往地使用它了

<MyComponent
    htmlString={'<p>Hello <b>World</b></p>'}
/>

这可以通过使用块{[]}中的内容来解决。为了更清楚,可以参考下面的示例。

{[
   'abc',
   <b>my bold</b>, 
   'some other text'
]} 

这将保留标签下文本的格式,而其他文本将作为纯文本打印。

如果你想在React中渲染原始html,可以使用下面的方法

<div dangerouslySetInnerHTML={{__html: `html-raw-goes-here`}} />

示例-渲染 考试是个好日子