通过执行以下操作,我拥有Prism.js
与我的网站一起使用的基本功能:Next.js
package.json
"dependencies": {
...
"next": "9.5.3",
"react": "16.13.1",
"typescript": "3.9.4",
"prismjs": "1.22.0"
},
"devDependencies": {
...
"@types/prismjs": "1.16.2"
}
pages/_app.tsx
...
import "prismjs/themes/prism-tomorrow.css";
...
pages/blog-article.tsx
...
import Prism from "prismjs";
import "prismjs/components/prism-hcl";
import "prismjs/plugins/line-highlight/prism-line-highlight";
...
export default function BlogArticle(){
useEffect(() => {
if (typeof window !== 'undefined') {
Prism.highlightAll();
}
}, []);
return <div>
<pre className="language-hcl" style={{marginTop: "1em"}}>
<code>{`xxx`}</code>
</pre>
</div>
}
一切正常,源代码被正确突出显示 - 当我尝试使用Prism的line-highlight插件时,问题就出现了。
当我将data-line
属性添加到 HTML 时,如下所示。
pages/blog-article.tsx
...
<pre className="language-hcl" style={{marginTop: "1em"}} data-line={1}>
<code>{`xxx`}</code>
</pre>
...
我收到以下错误:
Warning: Text content did not match. Server: "xxx
" Client: "xxx"
所以,如果我理解正确:这是来自 的错误Next.js
,告诉我我的服务器渲染内容和客户端渲染内容不同?
查看错误消息,该插件似乎在内容末尾添加了换行符,但仅在服务器渲染期间,而不是客户端渲染期间。
请注意,其他 Prism 插件似乎也可以工作;我试用了line-numbers
插件,并没有导致这个问题。
这是插件的错误Prism.js
还是line-highlight
我做错了什么?
有什么解决方法可以让它继续运行吗?