javascript - 在 React State 中传递 html 标签的正确方法是什么?

标签 javascript html reactjs

我正在使用 React 创建博客。我计划从服务器获取博客的主要内容并通过 Props/State 传递到 React 组件。博客内容可以包含 html 标签,例如:

  • block 引用
  • h2 和 h3
  • img、视频、嵌入代码等

我希望将博客内容与这些标签一起存储在 Database/json 文件中,并在页面加载时呈现内容。 但在React中似乎很难做到。我们可以通过三种方式实现这一目标:

  1. 危险地设置InnerHTML
  2. 将内容存储在表单数组对象 [html 内容] 中(将字符串内容插入数组不起作用)。
  3. 为所有 html 实体传递 unicode 字符。

这个问题很好地讨论了这些方法:

Rendering raw html with reactjs

我的查询是:

  1. 是否应该改变整个流程/架构来处理这个问题?
  2. 从 ajax 调用插入大型 html 内容到 React 组件进行渲染的最佳方法是什么?
  3. 应该考虑哪些设计决策来制作功能齐全且动态/可扩展的博客?
  4. 如何对博客内容(存储在某些文件/数据库中)等动态内容进行搜索引擎优化。 ?

最佳答案

dangerouslySetInnerHTML 没有什么特别的。无论是否使用 React,从 javascript 渲染 HTML 总是很危险,具体取决于所述 HTML 的来源。例如,如果您正在渲染自己创建的帖子并将其保存到数据库,则不会有危险(除非您的数据库已被泄露)。但假设您对某个帖子有评论,并且用户发送恶意代码作为评论。访问该页面的所有其他用户都会从数据库中获取恶意代码,并在浏览器上“危险地”执行它。因此,您需要做的是在保存到数据库之前清理所有用户输入,以确保 HTML 源的安全。您可以使用一些库来实现这一目标,例如 - http://htmlpurifier.org/

关于SEO,您可以使用服务器端渲染 - https://www.smashingmagazine.com/2016/03/server-side-rendering-react-node-express/

确保您在网址上拥有所需的所有信息,这样您就不会依赖“状态”来呈现页面,例如帖子 ID 等。您可以通过使用 React Router 来实现这一点 - https://github.com/reactjs/react-router

关于javascript - 在 React State 中传递 html 标签的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38493320/

相关文章:

javascript - 使用 jQuery 验证用户名

javascript - 计算总金额(含增值税百分比)

javascript - 在设定的时间后取消 requestAnimationFrame

javascript - ServiceWorkerContainer.ready 特定的 scriptURL?

html - 可见的彩色内容在 Chrome 中显示透明

javascript - 我可以在 React 中跨多个树共享一个组件实例吗?

javascript - JScrollPane 不会滚动整个 div? -- JScrollPane 不会随 div 在窗口调整大小时动态移动

html - tumblr 标签 - 页脚大小需要与标签相关

javascript - 无法以 redux-form 形式显示提交错误

javascript - 如何突出显示带有红色边框的空必填(*)输入字段,单击React中的按钮?