javascript - 将标记与 jsx 结合起来

标签 javascript reactjs

我有一个数组,其中某些元素是表示标记的字符串,如 "<p>Hello there</p>"其他元素是 JSX。我需要渲染一个 div,其中所有这些元素都按照与数组中的索引相对应的正确顺序排列。我需要这样做的原因是因为 JSX 元素是我从原始 HTML 的其余部分解析出来的元素,并添加了功能,例如 onClick .

我知道您可以使用 dangerouslySetInnerHTML 进行标记对于 jsx,你可以像这样插入它:

<div>
  {myArrayOfComponents}
</div>

但是,有没有办法将两者结合起来制作 div由标记和 JSX 组成?

最佳答案

以下内容应该放在 React 类的 render 方法中或者是 React 功能组件。要保持原始数组的顺序,只需使用映射函数,该函数作用于数组的每个元素,创建一个具有相同大小和顺序但具有新映射元素的新数组。对数组中的每个元素进行类型检测,以确定它是字符串(转换为 JSX React 组件)还是已经是 JSX React 组件(不执行任何操作)。最后,在 div 中返回新数组。

var elements = ['<p>Test HTML</p>', <p>Test JSX</p>].map(function(element) {
  if (typeof(element) === 'string') {
    return (<span dangerouslySetInnerHTML={{__html: element}}></span>);
  } else {
    return element;
  }
});
return (
  <div>{elements}</div>
)

只需将第一行中我的数组替换为你的数组即可使用它。

Code Sandbox Example

关于javascript - 将标记与 jsx 结合起来,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46084616/

相关文章:

javascript - JavaScript 中 and 运算符的行为

javascript - ember linkTo 在路由的模型 Hook 中发送空参数

javascript - 选择元素AngularJS的默认值

javascript - 等待 _app.js 加载,然后在 Next.js 上运行组件

javascript - 卸载 React Parent 而不卸载 Child

javascript - 如何在同一代码行中使用 map() 和 find()

javascript - 解除 child 点击 Accordion 的绑定(bind)

javascript - 关于数组的 HTML Javascript。

reactjs - 在两个 reducer 之间共享状态

javascript - 如果以其他语言保存,如何从服务器获取数据?