一、嵌入内容的代码没有高亮的效果
const TestHeghLight = () => {
const content = `<pre>
<code>console.log('未来可期')</code>
<code>console.log('不负韶华')</code>
</pre>
<h3>塞翁失马焉知非福</h3>
<pre>
<code>const arr=['你','好','呀']
arr.forEach(item=>{console.log(1)})</code>
</pre>`
return (
<div className='html'>
<div dangerouslySetInnerHTML={{ __html: content }} />
</div>)
}
export default TestHeghLight
二、如何实现嵌入内容的代码显示高亮
通过 highlight.js 库实现对文章正文 HTML 中的代码元素自动添加语法高亮
步骤如下:
1.安装包 highlight.js
npm i highlight.js
2.在页面中引入 highlight.js 以及样式
import hljs from 'highlight.js'
import 'highlight.js/styles/vs2015.css'
3.在 useEffect 里面,对嵌入内容的代码进行语法高亮的操作
useEffect(() => {
// 配置 highlight.js
hljs.configure({
// 忽略未经转义的 HTML 字符
ignoreUnescapedHTML: true
})
// 获取到内容中所有的code标签
const codes = document.querySelectorAll('.html pre code')
codes.forEach((el) => {
// 让code进行高亮
hljs.highlightElement(el as HTMLElement)
})
}, [])
三、使用 highlight.js 实现代码高亮效果
import hljs from 'highlight.js'
import 'highlight.js/styles/vs2015.css'
import { useEffect } from 'react'
const TestHeghLight = () => {
useEffect(() => {
// 配置 highlight.js
hljs.configure({
// 忽略未经转义的 HTML 字符
ignoreUnescapedHTML: true
})
// 获取到内容中所有的code标签
const codes = document.querySelectorAll('.html pre code')
codes.forEach((el) => {
// 让code进行高亮
hljs.highlightElement(el as HTMLElement)
})
}, [])
const content = `<pre>
<code>console.log('未来可期')</code>
<code>console.log('不负韶华')</code>
</pre>
<h3>塞翁失马焉知非福</h3>
<pre>
<code>const arr=['你','好','呀']
arr.forEach(item=>{console.log(1)})</code>
</pre>`
return (
<div className='html'>
<div dangerouslySetInnerHTML={{ __html: content }} />
</div>)
}
export default TestHeghLight