【发布时间】:2019-09-23 16:02:30
【问题描述】:
我正在使用 Contentful 的富文本字段类型来构建页面,我拥有的 Embedded_Blocks 之一是用于构建表格的 Markdown 字段类型:
Markdown 字段类型:
| Title | Title |
| ---------- | ---------- |
| Cell | Cell |
我可以像这样检索富文本数据并构建我的 Embedded_Blocks:
[BLOCKS.EMBEDDED_ENTRY]: (node) => {
const fields = node.data.target.fields;
switch (node.data.target.sys.contentType.sys.id) {
case 'video':
const url = (fields.url['en-US']);
return <Video url={url}/>
// This is how I'm currently trying to convert Markdown to HTML
///////////////////////////////////////////////////////////////
case 'markdown':
const markdown = (fields.markdown['en-US']);
console.log('markdown', markdown);
return <div dangerouslySetInnerHTML={{ __html: markdown }} />
default:
return <div>Fallback</div>
}
},
我遇到的问题是它只返回一个字符串,我假设是因为在将markdown 传递给dangerouslySetInnerHTML={{ __html: markdown }} 之前,我没有将其转换为 HTML。
如何将 Markdown 转换为 HTML,以便使用 dangerouslySetInnerHTML={{ __html: markdown }} 呈现它?
【问题讨论】:
-
返回字符串到底是什么?为什么这是一个问题?
markdown应该是dangerouslySetInnerHTML={{ __html: markdown }}中的字符串 -
我的理解是
dangerouslySetInnerHTML={{ __html: markdown }}要求 Markdown 文本已经被转换为包含 HTML 的字符串。这不是我所拥有的。const markdown = (fields.markdown['en-US']);只是给了我一串未转换的降价。所以dangerouslySetInnerHTML只是显示标记文本的刺痛,因为没有 HTML。 -
那么您需要先将其转换为 html 使用例如markdown-it 或gatsbyjs.org/packages/gatsby-transformer-remark
-
@mb21 不确定 D'uh 是否值得。我的问题清楚地表明,转换为 HTML 是我遇到的问题,很明显我知道危险的 SetInnerHTML 的用途。我是在寻求帮助,而不是一种聪明的态度。在暗示愚蠢之前,请仔细阅读问题。
标签: reactjs markdown gatsby contentful