这是用reactjs呈现原始html的唯一方法吗?
// http://facebook.github.io/react/docs/tutorial.html
// tutorial7.js
var converter = new Showdown.converter();
var Comment = React.createClass({
render: function() {
var rawMarkup = converter.makeHtml(this.props.children.toString());
return (
<div className="comment">
<h2 className="commentAuthor">
{this.props.author}
</h2>
<span dangerouslySetInnerHTML={{__html: rawMarkup}} />
</div>
);
}
});
我知道有一些很酷的方法用JSX标记东西,但我主要感兴趣的是能够渲染原始的html(所有的类,内联样式等)。像这样复杂的东西:
<!-- http://getbootstrap.com/components/#dropdowns-example -->
<div class="dropdown">
<button class="btn btn-default dropdown-toggle" type="button" id="dropdownMenu1" data-toggle="dropdown" aria-expanded="true">
Dropdown
<span class="caret"></span>
</button>
<ul class="dropdown-menu" role="menu" aria-labelledby="dropdownMenu1">
<li role="presentation"><a role="menuitem" tabindex="-1" href="#">Action</a></li>
<li role="presentation"><a role="menuitem" tabindex="-1" href="#">Another action</a></li>
<li role="presentation"><a role="menuitem" tabindex="-1" href="#">Something else here</a></li>
<li role="presentation"><a role="menuitem" tabindex="-1" href="#">Separated link</a></li>
</ul>
</div>
我不想在JSX中重写所有这些。
也许我对这一切的想法都错了。请纠正我。
危险的是,React取代了在浏览器DOM中使用innerHTML。一般来说,从代码中设置HTML是有风险的,因为很容易在不经意间让用户遭受跨站点脚本(XSS)攻击。
在通过危险的LysetinerHTML
将原始HTML注入DOM之前,最好/更安全地对其进行消毒(例如使用DOMPurify)。
DOMPurify-一个仅DOM,超快速,超容忍的XSS消毒器,适用于超文本标记语言,MathML和SVG。DOMPurify使用安全的默认值,但提供了大量的可配置性和钩子。
例子:
import React from 'react'
import createDOMPurify from 'dompurify'
import { JSDOM } from 'jsdom'
const window = (new JSDOM('')).window
const DOMPurify = createDOMPurify(window)
const rawHTML = `
<div class="dropdown">
<button class="btn btn-default dropdown-toggle" type="button" id="dropdownMenu1" data-toggle="dropdown" aria-expanded="true">
Dropdown
<span class="caret"></span>
</button>
<ul class="dropdown-menu" role="menu" aria-labelledby="dropdownMenu1">
<li role="presentation"><a role="menuitem" tabindex="-1" href="#">Action</a></li>
<li role="presentation"><a role="menuitem" tabindex="-1" href="#">Another action</a></li>
<li role="presentation"><a role="menuitem" tabindex="-1" href="#">Something else here</a></li>
<li role="presentation"><a role="menuitem" tabindex="-1" href="#">Separated link</a></li>
</ul>
</div>
`
const YourComponent = () => (
<div>
{ <div dangerouslySetInnerHTML={{ __html: DOMPurify.sanitize(rawHTML) }} /> }
</div>
)
export default YourComponent
您可以利用html来响应
npm模块。
注意:我是这个模块的作者,几个小时前刚刚发布。请随时报告任何错误或可用性问题。
现在有更安全的方法来呈现HTML。我在前面的回答中谈到了这一点。您有4个选项,最后一个选项使用了危险的HTML
。
超文本标记语言的渲染方法
>
<代码>
更安全-对Javascript字符串中的实体使用Unicode编号。
<代码>
或
<代码>
或者一个包含字符串和JSX元素的混合数组。
<代码>
最后一种方法-使用危险的HTML插入原始HTML
。
<代码>
问题内容: 那么这是用reactjs渲染原始html的唯一方法吗? 我知道有一些很酷的方法来用JSX标记内容,但是我主要对能够呈现原始html(具有所有类,内联样式等)感兴趣。像这样复杂的东西: 我不想在JSX中重写所有内容。 也许我在想这一切错。请纠正我。 问题答案: 您可以利用npm模块。 注意:我是该模块的作者,几小时前刚刚发布了该模块。请随时报告任何错误或可用性问题。
我正在尝试在表FORNMAT中显示数据。数据来自API。我需要显示表一旦数据接收从api。我正在使用类组件。下面我给出了尝试的东西。 //下面是我的jsx //下面是我从api获取数据的函数 //下面是我的api输出
假设我有: 我如何使它最终具有SMTH1行量,每个行包含SMTH2列量?
我正在将我的页面从html和jquery迁移到使用React,我知道React Router和Redux是在构建React应用程序时处理路由的方法,但目前,我想知道如何更改设置,以便能够为不同的页面呈现不同的React组件。目前,我可以在加载索引页时呈现一个react组件,但我认为可以添加另一个在它下面,为不同页面上的组件指定不同的div id,但我注意到一个错误,。这与不使用react路由器或其
我知道我可以在呈现组件时传递。我还知道方法。但问题是,不太有用,因为我的组件不知道它的初始状态。我有。所以我想在渲染的时候传递它。 类似这样的内容(伪代码): 我该怎么办? 假设我有一个组件。当我第一次呈现它时,初始状态与数据库中当前注释的快照相对应。当用户包含注释时,该列表将发生更改,这就是为什么它应该是而不是。现在,为了呈现注释的初始快照,我应该将它传递给组件,因为它无法知道它。我感到困惑的是
我刚开始检查react表单。我遇到了一个问题,react在渲染中标记了我试图填充输入框标签的行。以下是我的应用程序代码: 在这一点上,我所要做的就是用名称输入框的标签为“您的名字”来呈现表单,如果没有输入名称,则让react用名称输入框的标签为“您需要输入您的名字”来重新呈现表单。 非常感谢任何援助。