【发布时间】:2021-09-11 12:45:16
【问题描述】:
我想将 bundleMDX 返回的代码转换为我正在编写的 RSS 阅读器的字符串,这样我就可以将它与 ReactDOMServer.renderToStaticMarkup(mdx) 一起使用,例如:
上面的 Tailwind 博客使用了 next-mdx-remote,但我不确定如何在 mdx-bundler 中做类似的事情。
我尝试使用 mdxSource 将代码包装在 MDXLayoutRenderer 中:
import { MDXProvider } from '@mdx-js/react'
export const MDXLayoutRenderer = ({ mdxSource, ...rest }: IMDXLayoutRenderer): JSX.Element => {
const MDXLayout = React.useMemo(() => getMDXComponent(mdxSource), [mdxSource])
return <MDXLayout components={MDXComponents as any} {...rest} />
}
.
.
.
const mdx = (
<MDXProvider>
<MDXLayoutRenderer mdxSource={code} />
</MDXProvider>
)
但这会引发奇怪的 TS 错误,例如:
'MDXProvider' 指的是一个值,但在这里被用作一个类型。您的意思是“typeof MDXProvider”吗?ts(2749)
如果我将mdx 设为一个函数并从中返回值,那么它也不起作用:
const mdx = () => (
<MDXProvider>
<MDXLayoutRenderer mdxSource={code} />
</MDXProvider>
)
我只需要传递一个html 格式的字符串,以便我可以将它发送到 RSS 包提要。
我的示例与 Tailwind 博客完全相同,但有 1 个区别:我使用的是 mdx-bundler 而不是 next-mdx-remote
我该如何解决这个问题?
【问题讨论】:
-
你能提供一个minimal reproducible example吗?该错误提到
MDXProvider被用作一种类型,但在您提供的代码中没有发生这种情况。 -
@juliomalves 当然可以。刚刚添加了一个编辑以指定
MDXProvider。现在创建一个复制品:) -
@juliomalves 在进行复制时,我找到了答案。奇怪啊。被卡在上面2-3周。刚刚发布在下面:)
标签: reactjs typescript next.js mdxjs