javascript - 在反应的字符串中添加一个html元素
问题描述
我知道这不是 React 做事的方式,但这是我需要的,我只是想尝试一个解决方案。
在我的页面中执行操作后,我显示一个 JSON
JSON.stringify(myJSON, null, 4);
此更改触发了render
我的班级。
在这个 json 中,我有一个时间戳值,我将其转换为可读时间。我在字符串化之前这样做,如下所示:
myJson.timestamp = `${myJson.timestamp} ( ${newDate(parseInt(myJson.timestamp) * 1000)} )`
现在出现了奇怪的东西:我需要在这个翻译的时间戳旁边有一个按钮。在我的应用程序的以前版本中,我很容易这样做:
myJson.timestamp = myJson.timestamp + "( " + newDate(parseInt(myJson.timestamp) * 1000) + " ) <button>action!</button>"
这在页面中呈现了我的按钮。
但是 react 只是把它写成一个字符串,而不是渲染它。我猜这是因为 ReactDOM 不会将其解析为新的 HTML 元素,因为render
它不会在任何地方触发。
我想知道是否有可能在反应中做这样的事情以及如何做。如您所见,尝试以反应方式在该位置呈现按钮非常复杂,我不知道如何实际操作。
解决方案
@AnaLizaPandac 给了我解决这个问题的正确方法。dangerouslySetInnerHTML
是我正在寻找的东西,但我想花点时间更深入地了解为什么这个解决方案通常是错误的,以及为什么我真的需要它。在这里您可以找到此属性的文档。
如您所知,innerHTML
这很糟糕,因为它会将您的网页暴露给 XSS 攻击。我为什么要采用这个解决方案呢?此页面不包含与任何其他用户共享的任何信息,也不包含任何易受攻击的输入。我只需要使用时间戳旁边的按钮来装饰我的 JSON 对象,单击该按钮时,会重定向到另一个公共页面(如 google.com)。我相信这种行为不会将我的应用程序暴露给 XSS,并以一种简单优雅的方式解决我的问题。
我希望我现在对基于 dom 的 XSS 的工作方式有误,如果我误解了什么,请发表评论。
推荐阅读
- php - NGINX 按字母顺序排列 GET 参数
- linux - 如何在 Mint 中使用 bash 安装 Pycharm?以某种方式图标将添加到程序列表中
- scala - Gatling:多次动态设置一个场景
- grails - g 自定义标记库的属性内的标记库引用为空
- android - 在 Google 地图中显示附近标记的距离和名称
- powershell - 可以将对文件路径的 CERTUTIL 请求重定向到 powershell 变量吗?
- python - 在python中处理大字典和数据框
- jakarta-ee - 为用户分配角色
- vba - 如何根据单元格中的值调用excel vba函数
- css - 如何在子标签的子标签上应用样式?