我有一个项目在前端使用 next.js,在后端使用strapi。为了渲染使用 markdown 的strapi 的到达文本,我在前端使用 ReactMarkdown 包版本“6.0.3”。
它运作良好 - 除了删除线和下划线。为了使删除线起作用(现在它只是呈现这样的文本:~~一些要删除的文本~~),我需要添加一个名为 remarkgfm 或 gfm 的插件,并且对于下划线 - 它只显示一些文本标签和没有下划线文本,为此我需要添加一个名为 rehype-raw 的插件。那是来自文档:
附录 A:markdown react-markdown 中的 HTML 通常会转义 HTML(或使用 skipHtml 忽略它),因为它很危险并且违背了这个库的目的。但是,如果您在受信任的环境中(您信任降价),并且可以节省包大小(±60kb 压缩),那么您可以使用 rehype-raw:
那是因为它不是直接翻译html。
这是我的代码:
import ReactMarkdown from 'react-markdown'
import gfm from 'remark-gfm'
import remarkGfm from 'remark-gfm'
import style from './single-paragraph.module.scss'
const SingleParagraph = ( { subTitle, text, image, floatPosition } ) => {
const styleRow = {display: 'flex', flexDirection: 'row', alignItems: 'start'}
const styleRowReverse = {display:'flex', flexDirection: 'row-reverse', alignItems: 'start'}
return (
<div className={style.container}>
{subTitle && <h3 className={style.sub_title}>{subTitle}</h3>}
<div className={style.text_container}>
<div style={floatPosition==='end' ? styleRow : styleRowReverse} className={style.flex}>
{text &&
<ReactMarkdown
className={style.text}
linkTarget={ (href) => href.startsWith('http') ? "_blank" : "_self" }
remarkPlugins={[remarkGfm]}
>{text}</ReactMarkdown>
}
{image && <img src={image.url} width={image.width} height={image.height} alt="image" className={style.img}/>}
</div>
</div>
</div>
)
}
export default SingleParagraph
但随后它给了我以下错误:
TypeError: Cannot read properties of undefined (reading '2')
我尝试将此添加到 next.config.js,因为此讨论建议 https://github.com/vercel/next.js/issues/25454 :
const withTM = require("next-transpile-modules")([
"react-markdown",
"remark-gfm",
"micromark-extension-gfm",
"micromark-util-combine-extensions",
"micromark-util-chunked",
"micromark-util-character",
"micromark-util-sanitize-uri",
"micromark-util-encode",
"micromark-util-classify-character",
"micromark-util-resolve-all",
"micromark-factory-space",
"mdast-util-gfm",
"ccount",
"mdast-util-find-and-replace",
"unist-util-visit-parents",
"unist-util-is",
"mdast-util-to-markdown",
"markdown-table",
]);
module.exports = withTM({ webpack5: false });
然后在我的文件中导入降价:
import Markdown from 'react-markdown/react-markdown.min'
但仍然给出该错误,我在配置上做错了什么?