admin管理员组文章数量:1290976
I have a function which returns several lines of html, like so:
render: function() {
var badges = user.get('achievements').badges.map(function(badge) {
var str = '<h3><span className="fa fa-fw '
switch(badge.id) {
case '0':
str += ('fa-briefcase"></span><small>' + badge.text + '</small></h3>')
break;
case '1':
str += ('fa-shopping-cart"></span><small>' + badge.text + '</small></h3>')
break;
...
}
return str;
});
return (
<div className="pull-right">
{badges}
</div>
);
}
On doing this the string is rendered as it is on the page, as text:
<h3><span className="fa fa-fw fa-briefcase"></span><small>Visionary</small></h3><h3><span className="fa fa-fw fa-shopping-cart"></span><small>Active</small></h3><h3><span className="fa fa-fw fa-sitemap"></span><small>Lorem</small></h3><h3><span className="fa fa-fw fa-tasks"></span><small>Ipsum</small></h3><h3><span className="fa fa-fw fa-signal"></span><small>Dolor</small></h3><h3><span className="fa fa-fw fa-check-square"></span><small>Amet;</small></h3>
How do I render it as proper HTML ?
I have a function which returns several lines of html, like so:
render: function() {
var badges = user.get('achievements').badges.map(function(badge) {
var str = '<h3><span className="fa fa-fw '
switch(badge.id) {
case '0':
str += ('fa-briefcase"></span><small>' + badge.text + '</small></h3>')
break;
case '1':
str += ('fa-shopping-cart"></span><small>' + badge.text + '</small></h3>')
break;
...
}
return str;
});
return (
<div className="pull-right">
{badges}
</div>
);
}
On doing this the string is rendered as it is on the page, as text:
<h3><span className="fa fa-fw fa-briefcase"></span><small>Visionary</small></h3><h3><span className="fa fa-fw fa-shopping-cart"></span><small>Active</small></h3><h3><span className="fa fa-fw fa-sitemap"></span><small>Lorem</small></h3><h3><span className="fa fa-fw fa-tasks"></span><small>Ipsum</small></h3><h3><span className="fa fa-fw fa-signal"></span><small>Dolor</small></h3><h3><span className="fa fa-fw fa-check-square"></span><small>Amet;</small></h3>
How do I render it as proper HTML ?
Share Improve this question edited May 12, 2014 at 21:23 Ross Allen 44.9k14 gold badges99 silver badges97 bronze badges asked May 12, 2014 at 7:07 myusufmyusuf 12.3k12 gold badges38 silver badges50 bronze badges2 Answers
Reset to default 5While using dangerouslySetInnerHTML
does work, I remend avoiding it in this case since you are in control of the markup. That attribute starts with dangerously
for a reason: those badges are now a vector for code injection.
render() {
const BADGE_ID_TO_ICON_CLASS_NAME = {
'0': 'fa-briefcase',
'1': 'fa-shopping-cart',
...
};
return (
<div className="pull-right">
{user.get('achievements').badges.map(badge => (
<h3 key={badge.id}>
<span
className={`fa fa-fw ${BADGE_ID_TO_ICON_CLASS_NAME[badge.id]}`}
/>
<small>{badge.text}</small>
</h3>
))}
</div>
);
}
So I found the answer myself:
We need to use dangerouslySetInnerHTML={{__html: badges}
to achieve this result.
So:
<div className="pull-right" dangerouslySetInnerHTML={{__html: badges}}></div>
did the trick. Hope it helps.
本文标签: javascriptString as html in reactjsStack Overflow
版权声明:本文标题:javascript - String as html in reactjs - Stack Overflow 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1741507656a2382418.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论