如何将字符串传递给反应组件并将其视为 html?

Posted

技术标签:

【中文标题】如何将字符串传递给反应组件并将其视为 html?【英文标题】:How can I pass a string to a react component and have it treated as html? 【发布时间】:2021-11-02 06:40:38 【问题描述】:

我有一个反应组件,其中传递的属性之一是字符串。 但是这个字符串是一个html组件,比如,

            <Example time="4 <sup> th </sup>  September">
                Text
            </Example>

但是,在我收到的组件上,我希望将其呈现为 html 而不是字符串。

&lt;h6 className="..."&gt; time &lt;/h6&gt;

【问题讨论】:

您能否为此提供更多背景信息?房产是什么样子的? 我想我可能对此有答案,但需要确保它符合您的需求。 您能否尝试为我们提供更多关于您要完成的工作的背景信息。 ***.com/help/minimal-reproducible-example 你只是想将time 属性渲染到标题元素中吗? @RyanLe 我以为我做到了,上面提供的示例就像我想要实现的那样。我有一个将日期作为字符串的反应组件,但是我想在我的日期中使用 标记。所以我想弄清楚如何传递一个字符串并将其呈现为一个 html 标签。 您的&lt;sup&gt; 是否来自某个财产?尝试为您的问题提供更多背景信息。例如您的属性来自哪里,以及整个组件的外观。 【参考方案1】:

基本上你想显示从另一个来源给出的 html(通常作为文本) dangerouslySetInnerHTML 在 DOM 元素下作为一个属性在 react 中,并且是 React 的替代 innerHTML 从 vanilla javascript 中知道的

当使用dangerouslySetInnerHTML 属性时,您需要发送一个带有__html 键的对象,如下所示:

<div dangerouslySetInnerHTML= __html: 'beware of dangerously Set InnerHTML' >

注意这个属性,它不是无缘无故这样调用的,不注意的使用会为你打开跨站点脚本攻击(XSS attack)

感谢@FrancisJohn 在this 线程中的进一步解释:

当你使用 dangerouslySetInnerHTML 时的场景,它会让 React 知道 该组件内部的 HTML 不是它关心的东西 关于。

因为 React 使用了一个虚拟 DOM,所以当它去比较 diff 针对实际的 DOM,它可以直接绕过检查 该节点的子节点,因为它知道 HTML 来自另一个 资源。所以有性能提升。

【讨论】:

【参考方案2】:
dangerouslySetInnerHTML 

来自文档

function createMarkup() 
  return __html: 'First &middot; Second';


function MyComponent() 
  return <div dangerouslySetInnerHTML=createMarkup() />;

这里是文档link

【讨论】:

以上是关于如何将字符串传递给反应组件并将其视为 html?的主要内容,如果未能解决你的问题,请参考以下文章

在设置子组件的数组状态并将其通过反应测验传递回父组件时出现问题

如何将组件的状态传递给父级?

反应切换功能

如何将服务器端渲染中的数据从节点传递给reactjs组件

如何使用从子组件传递给组件的反应变量更新 redux 状态

如何将一个反应组件传递给另一个反应组件以包含第一个组件的内容?