实际上,可以采用多种方法。
您想在道具中使用JSX
您可以简单地使用{}使JSX解析参数。唯一的限制与每个JSX元素相同:它必须仅返回一个根元素。
myProp={<div><SomeComponent>Some String</div>}
最好的可读方法是创建一个函数renderMyProp,该函数将返回JSX组件(就像标准渲染函数一样),然后只需调用myProp = {this.renderMyProp()}
您只想将HTML作为字符串传递
默认情况下,JSX不允许您从字符串值呈现原始HTML。但是,有一种方法可以做到这一点:
myProp="<div>This is some html</div>"
然后可以在组件中像这样使用它:
<div dangerouslySetInnerHTML=myProp={{ __html: this.renderMyProp() }}></div>
请注意,此解决方案可以在跨站点脚本伪造攻击中“打开”。还要注意,您只能呈现简单的HTML,不能呈现JSX标签或组件或其他奇特的东西。
数组方式
作为响应,您可以传递一个JSX元素数组。这意味着:
myProp={["This is html", <span>Some other</span>, "and again some other"]}
我不推荐这种方法,因为:
- 它将创建一个警告(缺少键)
- 不可读
- 这并不是真正的JSX方式,它更像是一种hack,而非预期的设计。
孩子们的方式
为了完整起见添加它,但为了做出反应,您还可以使所有“位于”组件内部的子项。
因此,如果我采用以下代码:
<SomeComponent>
<div>Some content</div>
<div>Some content</div>
</SomeComponent>
然后,这两个div将在SomeComponent中以this.props.children的形式提供,并且可以使用标准{}语法进行呈现。
当您只有一个HTML内容要传递给组件时,此解决方案是完美的(想象一个Popin组件仅将Popin的内容作为子组件)。
但是,如果您有多个内容,则不能使用子级(或至少需要将其与此处的其他解决方案结合使用)