【发布时间】:2021-01-29 11:59:28
【问题描述】:
如何在 react 应用中将 JSON 转换为带有 html 元素的普通 html?
请注意,如果您不知道要注入的 HTML 字符串中的内容,那么 dangerouslySetInnerHTML 可能会很危险
根据反应文档-
dangerouslySetInnerHTML 是 React 在 浏览器 DOM。一般来说,从代码中设置 HTML 是有风险的,因为 很容易无意中将您的用户暴露给跨站点脚本 (XSS) 攻击。所以,你可以直接从 React 设置 HTML,但是你有 输入 dangerouslySetInnerHTML 并使用 __html 传递一个对象 关键,提醒自己这是危险的。
我在下面创建了一个代码沙箱: https://codesandbox.io/s/relaxed-sunset-tlmr2?file=/src/App.js
输出只是呈现为字符串而不是 html 元素。
这是我的代码:
import React from "react";
import "./styles.css";
const blocks = {
time: 1602725895949,
blocks: [
{
type: "header",
data: {
text: "This is a heading",
level: 2
}
},
{
type: "paragraph",
data: {
text: "This is a paragraph"
}
}
]
};
export default function App() {
function convertToHtml({ blocks }) {
console.log(blocks);
var convertedHtml = "";
blocks.map((block) => {
switch (block.type) {
case "header":
convertedHtml += `<h${block.data.level}>${block.data.text}</h${block.data.level}>`;
break;
case "paragraph":
convertedHtml += `<p>${block.data.text}</p>`;
break;
default:
console.log("Unknown block type", block.type);
break;
}
});
return <React.Fragment>{convertedHtml}</React.Fragment>;
}
return (
<div className="App">
<h1>JSON to html below</h1>
{convertToHtml(blocks)}
</div>
);
}
【问题讨论】:
-
您必须直接返回 JSX 而不是将其设为字符串。我会在几分钟后发布答案。
-
@diedu 我编辑了这个问题以表明根据反应文档不推荐危险的SetInnerHTML。您发布的答案使用危险的SetInnerHTML
标签: reactjs