You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React+Material UI博客:TinyMCE HTML内容渲染显示标签如何解决?

React渲染TinyMCE HTML内容的解决方案

问题

用React + Material UI搭建博客,集成TinyMCE编辑器后,文章内容已以HTML格式存入JSON,但前端渲染单篇文章时,显示的是带所有HTML标签的原始文本,而非带段落、格式的正常内容。试过.getContent({ format: 'text' })没用,希望不依赖额外npm包解决。

解决方法

React默认会转义HTML内容来避免XSS风险,要渲染原始HTML结构,直接用内置的dangerouslySetInnerHTML属性即可:

基础用法

假设从JSON获取的文章内容存在post.body变量中,在组件里这样渲染:

<div dangerouslySetInnerHTML={{ __html: post.body }} />

样式优化(可选)

TinyMCE生成的内联样式可能和你的博客样式冲突,用Material UI的组件或自定义容器做样式隔离:

import Box from '@mui/material/Box';

<Box
  sx={{
    '& p': { margin: '0 0 1rem', lineHeight: 1.6 },
    '& strong': { fontWeight: 700 },
    '& ul': { paddingLeft: '1.5rem', margin: '1rem 0' },
    // 根据需求添加更多样式覆盖
  }}
  dangerouslySetInnerHTML={{ __html: post.body }}
/>

关于.getContent({ format: 'text' })的问题

这个方法是提取纯文本,会丢失所有格式标记,而你需要保留HTML结构来渲染排版,所以应该保留getContent()默认的HTML输出,再用dangerouslySetInnerHTML解析渲染。

安全提示

dangerouslySetInnerHTML的命名是为了提醒你注意XSS风险,如果内容来自用户提交,建议手动过滤掉<script>、<iframe>等危险标签,避免恶意代码执行。

内容的提问来源于stack exchange,提问作者postmetric

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 16:01:09