插入HTML与反应variables语句(JSX)
我正在用React构build一些东西,我需要在JSX中插入带有Reactvariables的HTML。 有没有办法有这样的variables:
var thisIsMyCopy = '<p>copy copy copy <strong>strong copy</strong></p>';
并插入到像这样的反应,并有它的工作?
render: function() { return ( <div className="content">{thisIsMyCopy}</div> ); }
并按预期插入HTML? 我还没有看到或听到任何可以做到这一点的反应函数,或parsing的东西,可以使这个工作的方法。
你可以使用危险的SetInnerHTML ,例如
render: function() { return ( <div className="content" dangerouslySetInnerHTML={{__html: thisIsMyCopy}}></div> ); }
请注意,如果您不知道正在注入的HTMLstring是什么,那么使用dangerouslySetInnerHTML
会非常危险。 这是因为恶意的客户端代码可以通过脚本标签注入。
如果您不能100%确定要呈现的HTML是XSS(跨站点脚本)安全,则可以通过DOMPurify等实用工具清理HTMLstring。
例:
import DOMPurify from 'dompurify' var thisIsMyCopy = '<p>copy copy copy <strong>strong copy</strong></p>'; render: function() { return ( <div className="content" dangerouslySetInnerHTML={{__html: DOMPurify.sanitize(thisIsMyCopy)}}></div> ); }
危险的SetInnerHTML有很多缺点,因为它设置在标签内部。
我build议你使用一些反应包装,就像我在npm上find一个这样的包装。 html-react-parser完成相同的工作。
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> ); }
很简单 :)
如果其他人仍然在这里。 有了ES6,你可以像这样创build你的htmlvariables:
render(){ var thisIsMyCopy = ( <p>copy copy copy <strong>strong copy</strong></p> ); return( <div> {thisIsMyCopy} </div> ) }