数据通过jquery Ajax的成功回调函数显示。
$.ajax({
url: url here,
dataType: "json",
success: function(data) {
this.setState({
action: data.action
})
}.bind(this)
});
是否有任何简单的方法可以将其转换为html?我应该如何使用ReactJS?
#1 楼
默认情况下,React会转义HTML以防止XSS(跨站点脚本)。如果您确实要呈现HTML,则可以使用dangerouslySetInnerHTML
属性:<td dangerouslySetInnerHTML={{__html: this.state.actions}} />
React强制使用这种故意繁琐的语法,这样您就不会意外地将文本呈现为HTML并介绍XSS错误。
#2 楼
现在有更安全的方法可以完成此操作。这些方法已更新了文档。其他方法
最简单-使用Unicode,将文件另存为UTF-8并设置
charset
至UTF-8。 <div>{'First · Second'}</div>
更安全-对Javascript字符串中的实体使用Unicode数字。
<div>{'First \u00b7 Second'}</div>
或
<div>{'First ' + String.fromCharCode(183) + ' Second'}</div>
或包含字符串和JSX元素的混合数组。
<div>{['First ', <span>·</span>, ' Second']}</div>
最后的手段-使用
dangerouslySetInnerHTML
插入原始HTML。<div dangerouslySetInnerHTML={{__html: 'First · Second'}} />
评论
我已经准备好文档,但是关于一个长HTML字符串(例如,所见即所得编辑器中的HTML字符串)?我看不到如何使用第一种,第二种或第三种方法
–ericn
2015年8月14日,下午3:47
我同意@eric。方法1-3用于将已转义的内容存储在某处,例如数据库?还要注意,方法4(唯一的方法)意味着您不能添加子节点。
– dvdplm
15/09/23在19:20
对。这些带有硬编码“动态”内容的示例没有多大意义。
–regularmike
2015年10月10日,0:47
This is my innerHTML - "Displaying admins \u003cb\u003e1\u0026nbsp;-\u0026nbsp;10\u003c/b\u003e of \u003cb\u003e13\u003c/b\u003e in total" while this is what is being rendered - "Displaying admins 1 - 10 of 13 in total". When I try to use dangerouslySetInnerHTML, evrything breaks.
– vipin8169
Mar 21 '16 at 11:36
#3 楼
我建议使用Miles创建的Interweave。它是一个了不起的库,它利用许多巧妙的技术来解析并安全地将HTML插入DOM。Interweave是一个React库,可安全地呈现HTML,过滤器
属性,使用匹配器自动换行文本,呈现表情符号字符以及
更多内容。
Interweave是一个强大的React库,可以:
安全地呈现HTML,而无需使用危险的SetInnerHTML。
安全地剥离HTML标签。
自动XSS和注入保护。
使用过滤器清除HTML属性。
使用匹配器插入组件。
自动链接URL,IP,电子邮件和主题标签。
呈现表情符号和表情符号字符。
更多!
用法示例:
import React from 'react';
import { Markup } from 'interweave';
const articleContent = "<p><b>Lorem ipsum dolor laboriosam.</b> </p><p>Facere debitis impedit doloremque eveniet eligendi reiciendis <u>ratione obcaecati repellendus</u> culpa? Blanditiis enim cum tenetur non rem, atque, earum quis, reprehenderit accusantium iure quas beatae.</p><p>Lorem ipsum dolor sit amet <a href='#testLink'>this is a link, click me</a> Sunt ducimus corrupti? Eveniet velit numquam deleniti, delectus <ol><li>reiciendis ratione obcaecati</li><li>repellendus culpa? Blanditiis enim</li><li>cum tenetur non rem, atque, earum quis,</li></ol>reprehenderit accusantium iure quas beatae.</p>"
<Markup content={articleContent} /> // this will take the articleContent string and convert it to HTML markup. See: https://milesj.gitbook.io/interweave
//to install package using npm, execute the command
npm install interweave
评论
您能提供一个用法示例吗?
– El Anonimo
18年8月6日在10:18
@ElAnonimo我添加了一个用法示例。希望这会使事情变得更加清晰。
–Arman Nisch
18-09-16在7:26
感谢一百万,交织正是我所需要的。干杯。
–尼古拉斯·汉密尔顿
19年2月26日在22:48
此文档没有帮助。我也尝试了几行html,并且页面上充满了错误消息。有人提供示例或任何带有文档的资源吗?
–塔伦·科拉(Tarun Kolla)
19年7月31日在14:49
您知道Interweave不能涵盖哪些威胁吗?
–克里斯托弗(Christophe)
10月9日7:48
#4 楼
npm i html-react-parser;
import Parser from 'html-react-parser';
<td>{Parser(this.state.archyves)}</td>
评论
该库的最新版本提供了一种非常干净的html注入方式。而且replace方法是用自己的
– Micros
12月16日12:54
#5 楼
我发现这个js小提琴。像这样function unescapeHTML(html) {
var escapeEl = document.createElement('textarea');
escapeEl.innerHTML = html;
return escapeEl.textContent;
}
<textarea className="form-control redactor"
rows="5" cols="9"
defaultValue={unescapeHTML(this.props.destination.description)}
name='description'></textarea>
jsfiddle链接
评论
不幸的是,文档无法在服务器渲染上运行。
– Laurent Van Winckel
16-09-17在13:15
如果确实要从“ jsdom”导入JSDOM,则可能会成功。 global.window = new JSDOM('',{url:'http:// localhost'}); global.document = global.window.document;伊德克·古德勒克
– Coty Embry
19年4月12日在14:48
JSX在哪里?
– Martin Melichar
10月25日6:56
#6 楼
对于仍在尝试的用户,npm install react-html-parser安装后,每周下载123628。
import ReactHtmlParser from 'react-html-parser'
<div>{ReactHtmlParser(htmlString)}</div>
#7 楼
您还可以使用html-react-parser中的Parser()。我用过相同的。链接已共享。
#8 楼
我开始使用名为react-html-parser的npm包
#9 楼
如果您想在React中呈现原始html,可以使用以下内容<div dangerouslySetInnerHTML={{__html: `html-raw-goes-here`}} />
示例-渲染
测试是美好的一天
#10 楼
可以通过使用像这样在{[]}
块中放置的内容来解决此问题。为了更清楚起见,下面可以引用示例。{[
'abc',
<b>my bold</b>,
'some other text'
]}
这将保留标签下文本的格式,而其他字符将打印为纯文本。
评论
此语法显示在首页和教程中,但我只是意识到它在其他任何地方都没有记录,因此我提交了#413进行修复。
–索菲·阿尔珀特(Sophie Alpert)
13年10月9日在16:34
正确!我已经使用危险地解决了这个问题SetInnerHTML,但谢谢:)
– Peter Wateber
13-10-10在2:37
如果要从外部API获取信息,则值得使用dompurify npm包中的sanitize函数对内容进行安全清理。
–巴里·迈克尔·道尔(Barry Michael Doyle)
1月27日8:10
可能您可以尝试这篇文章,您可以在其中将内容放入stackoverflow.com/questions/33381029/…示例:{['abc',我的粗体,'其他一些文字']}
– Sunil Kumar
11月26日12:31