为了避免linter错误,我使用它像这样:
render() { const props = { dangerouslySetInnerHTML: { __html: '<br/>' }, }; return ( <div {...props}></div> ); }
import { Fragment } from 'react' // react version > 16.0 var thisIsMyCopy = ( <Fragment> <p>copy copy copy <strong>strong copy</strong> </p> </Fragment> )
通过使用''将值设置为字符串,React无法知道它是HTML元素。您可以执行以下操作让React知道它是一个HTML元素 -
''
<Fragment>
如果有人还在这里。使用ES6,您可以像这样创建html变量:
render(){ var thisIsMyCopy = ( <p>copy copy copy <strong>strong copy</strong></p> ); return( <div> {thisIsMyCopy} </div> ) }
的 注意 dangerouslySetInnerHTML 如果你不知道你注入的HTML字符串是什么,可能会很危险。 强> 这是因为可以通过脚本标记注入恶意客户端代码。
dangerouslySetInnerHTML
通过诸如的实用程序清理HTML字符串可能是个好主意 的 DOMPurify 强> 如果您不是100%确定您正在呈现的HTML是安全的XSS(跨站点脚本)。
例:
import DOMPurify from 'dompurify' const thisIsMyCopy = '<p>copy copy copy <strong>strong copy</strong></p>'; render: function() { return ( <div className="content" dangerouslySetInnerHTML={{__html: DOMPurify.sanitize(thisIsMyCopy)}}></div> ); }
通过使用 '' 你正在把它变成字符串。使用没有引号可以正常工作。
您可以使用 dangerouslySetInnerHTML ,例如
render: function() { return ( <div className="content" dangerouslySetInnerHTML={{__html: thisIsMyCopy}}></div> ); }
dangerouslySetInnerHTML 有许多缺点,因为它设置在标签内。
我建议你使用一些反应包装,就像我在npm找到一个为此目的。 HTML的反应解析器 做同样的工作。
import Parser from 'html-react-parser'; var thisIsMyCopy = '<p>copy copy copy <strong>strong copy</strong></p>'; render: function() { return ( <div className="content">{Parser(thisIsMyCopy)}</div> ); }
非常简单 :)
您还可以在ReactDOM中包含此HTML,如下所示:
var thisIsMyCopy = (<p>copy copy copy <strong>strong copy</strong></p>); ReactDOM.render(<div className="content">{thisIsMyCopy}</div>, document.getElementById('app'));
这是两个链接 链接 和 LINK2 从React文档可能会有所帮助。