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

如何使用PrismJS正确高亮React tsx代码 解决组件标签丢失问题

问题原因

你写在<code>标签内的<、>等HTML特殊字符会被浏览器当作真实HTML标签解析,<SocketProvider>这类自定义标签会被浏览器识别为无效DOM标签直接移除,PrismJS执行时能拿到的就只剩注释内容了。

解决方案

方案1:手动转义代码内的HTML特殊字符

把代码里的所有<替换为&lt;,>替换为&gt;,&替换为&amp;即可,修改后的代码块部分如下:

<pre><code class="language-tsx">
  // Display some tsx:
  &lt;SocketProvider url={`ws://${apiServer}/...`}&gt;
    &lt;Stats /&gt;
  &lt;/SocketProvider&gt;
</code></pre>

方案2:用script标签包裹代码避免浏览器解析

不想手动转义的话,可以用type为text/prism的script标签存代码,再用PrismJS API渲染,示例如下:

<script type="text/prism" id="tsx-code" class="language-tsx">
// Display some tsx:
<SocketProvider url={`ws://${apiServer}/...`}>
  <Stats />
</SocketProvider>
</script>
<pre><code id="code-container"></code></pre>

<script>
  const code = document.getElementById('tsx-code').textContent;
  const container = document.getElementById('code-container');
  container.textContent = code;
  Prism.highlightElement(container);
</script>

可选配置

如果用的是PrismJS的自动渲染模式,还可以引入keep-markup插件,避免Prism本身额外清理标签内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 18:15:04