我将一些文字传递给组件:
<Component
text={`text with <span style={{fontWeight:bold}}>${thisPart}</span> emphasized`}
/>
虽然它肯定无法奏效,但我想这表明我的意图很好。知道如何让它发挥作用吗?
答案 0 :(得分:3)
您无法将字符串化的HTML传递给组件,因为它会打开XSS漏洞。
如果您必须呈现html,那么您需要使用 dangerouslySetInnerHTML
dangerouslySetInnerHTML
是React在浏览器DOM中使用innerHTML的替代品。通常,从代码设置HTML是有风险的,因为很容易无意中将您的用户暴露给跨站点脚本(XSS)攻击。因此,您可以直接从React设置HTML,但是您必须键入dangerouslySetInnerHTML
并传递带有__html键的对象,以提醒自己这很危险。例如:
function createMarkup() {
return {__html: 'First · Second'};
}
function MyComponent() {
return <div dangerouslySetInnerHTML={createMarkup()} />;
}
答案 1 :(得分:3)
请勿使用dangerouslySetInnerHTML
。这是一种反模式。
<MyComponent>
<span>text with</span>
<strong>{thisPart}</strong>
<span>emphasized</span>
</MyComponent>
可通过MyComponent span
属性
strong
和1个children
元素
class MyComponent extends React.Component {
render () {
return (
<div>
<p>some text</p>
<p>{this.props.children}</p>
</div>
)
}
}
会渲染
<div>
<p>some text</p>
<p>
<span>text with</span>
<strong>this part</strong>
<span>emphasized</span>
</p>
</div>