当前位置: 首页 > 面试题库 >

使用危险设置内部HTML中的React组件进行React

栾钟展
2023-03-14
问题内容

我有一个关于使用react的问题。从标题可以看到,我想知道是否可以在“
dangerouslySetInnerHTML”属性内使用React组件(由React.createClass创建)。我已经尝试过了,但是React只是打印代码而不进行如下转换:

const MySubComponent = React.createClass({
    render() {
        return (<p>MySubComponent</p>);
    }
});

...

let myStringHTML;
myStringHTML += "<ul>";
myStringHTML += "    <li>";
myStringHTML += "        <MySubComponent />";
myStringHTML += "    </li>";
myStringHTML += "</ul>";

const MyComponent = React.createClass({
    render() {
        return (
            <div dangerouslySetInnerHTML={{__html:myStringHTML}}></div>
        );
    }
});

我期望

<ul>
    <li>
        <p>MySubComponent</p>
    </li>
</ul>

但是代码与原始字符串相同,这意味着React并未转换MySubComponent。

有办法解决这个问题吗?上面的例子很简单,但是我的实际代码却很复杂。这将非常感谢gimme的帮助;)


问题答案:

dangerouslySetInnerHTML期望具有__html属性的JS对象应该是有效的HTML标记。相反,您在<MySubComponent />那儿提供并期望它呈现该组件的html。React不会<MySubComponent />在那里处理。dangerouslySetInnerHTML顾名思义,应避免使用。而且,您要在此处完成的任务仅可以通过React轻松完成。

const MySubComponent = React.createClass({
    render() {
        return (<li><p>MySubComponent {this.props.index}</p></li>);
    }
});

const MyComponent = React.createClass({
    render() {
        let subComponentList = [];
        [1,2,3,4,5].forEach(function(i){
            subComponentList.push(<MySubComponent key={i} index={i} />);
        }); 
        return (
            <ul>{subComponentList}</ul>
        );
    }
});

ReactDOM.render(<MyComponent />, mountNode);


 类似资料:
  • 问题内容: 我正在用React制作电视指南。我正在从此API中获取表演信息:http : //api.tvmaze.com/episodes/333 如您所见,包含html。如果我渲染该字段。那么HTML将被解释为字符串,这意味着您可以在页面上看到标签等。 我知道我可以使用,但出于安全原因不建议使用。最佳做法是什么?从API获取格式化的文本并需要呈现它必须非常普遍。我很惊讶,没有一个过滤器,这将允

  • 问题内容: 与在元素上设置元素的innerHTML与在元素上设置危险地设置InnerHTML属性有什么“幕后”区别?假设为简单起见,我正在对事物进行适当的消毒。 例: 与 我做的事情比上面的示例复杂一些,但总体思路是相同的 问题答案: 是,有一点不同! 使用vs 的直接效果是相同的-DOM节点将使用注入的HTML更新。 但是 ,在使用它时,让React 在幕后知道该组件内部的HTML并不是它关心的

  • 这个问题可能是泛泛的,但我试图理解这里的主要含义。 我正在尝试使用BCEL库进行一些字节码工程,部分工作流程要求我多次读取同一字节码文件(从一开始)。流程如下 在第4步中,我需要重置标记或获取流,就像它是从一开始的一样。我知道以下选择。 1)使用包装流-有机会获得“重置为无效标记”IOException 2)使用ByteArrayInputStream包装它-即使一些在线研究表明它是错误的,它仍然

  • 问题内容: 如何获得内部脚本 dangerouslySetInnerHTML 得到执行? 我无法执行 有人可以帮忙吗?谢谢 问题答案: 您不能这样做,因为为了安全起见,脚本标签会自动删除。 使用javascript的最佳方法是单独获取字符串,然后从 componentWillMount 或 componentDidMount 执行(或评估)它 __ 您显然可以使用任何字符串。我想您可能正在从服务器

  • 问题内容: 我有以下用例。 我的React组件中加载了一些第三方来源的HTML: 在外部加载的HTML内,存在一个针对特定范围的click事件,该事件应调用存在于我的应用程序中的回调函数。 我该把 myCallback 函数放在哪里? 如果将其放在组件类中,则单击跨度时会收到以下错误,因为据我了解,该函数对外部加载的HTML不可见: Uncaught ReferenceError:在HTMLSpa

  • 我有一个HTML,使用 我想做的是懒惰加载图像的性能。我尝试了几个包,如react-lazyload,但它似乎并没有懒惰加载图像的方式。如果我将超文本标记语言字符串拉到React组件中,它确实有效。 延迟加载如何处理从加载的图像?我怎样才能懒散地加载图像?

  • 本文向大家介绍CodeIgniter框架过滤HTML危险代码,包括了CodeIgniter框架过滤HTML危险代码的使用技巧和注意事项,需要的朋友参考一下 CodeIgniter过滤HTML危险代码的方法其实有好几种,其中最常见的有如下几种: 1.可以选择使用htmlspecialchars()方法过滤。 2.可以将config文件夹下面的config.php文件中的$config['global

  • 问题内容: 是否可以从外部源获取HTML / JSX内容并在React中动态呈现它?在我们的例子中,我们想从Wordpress API中获取内容,并在客户端和服务器上都进行渲染(我们正在使用NextJS) 因此,Wordpress API返回一个JSON响应,其中包括一个content属性,该属性是一串HTML / JSX。内容看起来像这样。 因此,如您所见,它将是HTML和React组件/ JS