当前位置: 首页 > 知识库问答 >
问题:

将JSX作为字符串变量嵌入到React JS中的其他JSX代码中

步德宇
2023-03-14

我有JSX代码,但它在一个字符串中。试图将该代码注入React组件中的其他JSX中,但遇到了问题。。。

我使用的是危险的HTML,但是JSX被当作HTML处理。我有JSX格式的className=“test”。。。因此,当呈现时,它具有HTML测试类(红色背景)

  createMarkup(){  
    var htmlString = '<div className="test">TESTING</div>';
    return {__html : htmlString}

  }

  render() {
     return (
        <div id="pageContent" className="container" dangerouslySetInnerHTML={this.createMarkup()}></div>
      );   
  }

它正在插入字符串变量,但是当你检查它时,输出是这样的:(你可以看到外部div的类名称现在是类,但是插入的字符串仍然被视为类名称

<div id="pageContent" class="container"><div classname="test">TESTING</div></div>

共有2个答案

百里飞捷
2023-03-14

所以也许我晚了一两年,但是,我怀疑危险的SetInnerHTML期望的不是JSX字符串,而是超文本标记语言字符串。

class App extends React.Component {
  createMarkup() {
    var htmlString = '<div class="test">TESTING</div>'; // class instead of className
    return { __html: htmlString };
  }

  render() {
    return (
      <div
        id="pageContent"
        className="container"
        dangerouslySetInnerHTML={this.createMarkup()}
      />
    );
  }
}


let main = document.getElementById("main");
ReactDOM.render(<App />, main);

console.log("The innerHTML of `#main` is:")
console.log(main.innerHTML)
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>

<div id="main"></div>
闻人梓
2023-03-14

由于通过传递的内容是危险的SetInnerHTML预期为超文本标记语言,并且它不会被React解析,因此class Name属性不会被解析为class,因此内容必须遵循添加属性的超文本标记语言约定一定看起来像

createMarkup(){  
    var htmlString = '<div class="test">TESTING</div>';
    return {__html : htmlString}

  }

  render() {
     return (
        <div id="pageContent" className="container" dangerouslySetInnerHTML={this.createMarkup()}></div>
      );   
  }

然而,你可以这样写

  createMarkup(){  
    return <div className="test">TESTING</div>
  }

  render() {
     return (
        <div id="pageContent" className="container">{this.createMarkup()}</div>
      );   
  }
 类似资料:
  • 我想知道在ReactJSJSX中是否可以嵌套if else if? 我尝试过各种不同的方法,但我无法让它发挥作用。 我正在寻找 我已经试过了,但是我不能把它渲染出来。我试过各种方法。添加嵌套if后,它总是会中断。 使现代化 最后,我选择了将其移动到renderContent并调用该函数的解决方案。不过,这两个答案都有效。我想我可以使用内联解决方案,如果它用于简单的渲染和更复杂的情况下的渲染内容。

  • 问题内容: 我有一个小反应页面,应该编译并显示html字符串。用react- foundation 编写的字符串中的html 该页面如下所示: 上面代码的结果只是一个字符串,我想知道是否有一种方法可以将html字符串转换为react元素 像这样的东西: PS我尝试 了但没用 提前致谢 编辑:代码在这里 问题答案: 我最初提供了一个关于如何将HTML字符串直接插入React的答案。但是,由于您还希望

  • 问题内容: 我对React有点陌生,尝试将className设置为string + prop。但是我不确定该怎么做以及这是否是最佳实践。 所以我正在尝试做的,显然是行不通的,是这样的: 我该如何写呢? 问题答案: 您可以使用字符串串联 或使用新的ES2015功能

  • 问题内容: 我知道JSX可能会引起很大的误导,因为它看起来像字符串,而实际上不是,因此,即使我们不是真正在操纵字符串,它也是问题中的“字符串”一词。 这是一个代码示例(显然是错误的): 我有一行,在某些情况下,我想在其前面“连接”一些div。正确的语法是什么?我试过括号,方括号和加号…它们似乎都不起作用… 谢谢 问题答案: 使用数组: 或使用片段: 在这两种情况下,您都必须 提供React的密钥

  • 问题内容: 在工作时,我感到有些困惑。 互联网上有很多示例,这些示例使用具有react的文件,但还有许多其他示例使用文件。 我已阅读过有关文件的信息,据我了解,它们只是让您在文件中编写html标签。但是同样的事情也可以写在文件中。 那么究竟是什么这两个分机之间的实际差异和? 问题答案: 文件扩展名没有。打包器/编译器/无论做什么,都将负责解决存在的文件内容类型。 但是,在确定要放入文件或文件类型中

  • 我试图转换在JSX中定义备用路由组件的方式,一个等效的TypeScript TSX文件。(1) JSX语法如下所示: 我试图将其转换为TypeScript,但在Visual Studio中,