首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Gatsby从富文本组件中将Markdown转换为HTML

使用Gatsby从富文本组件中将Markdown转换为HTML
EN

Stack Overflow用户
提问于 2019-05-06 10:21:44
回答 3查看 2.3K关注 0票数 1

我正在使用Contentful的Rich-Text字段类型来构建页面,我拥有的Embedded_Blocks之一是用于Markdown字段类型的,我正在使用它来构建一个表:

标记字段类型:

代码语言:javascript
运行
复制
| Title | Title | 
| ---------- | ---------- | 
| Cell | Cell | 

我可以检索富文本数据并构建我的Embedded_Blocks,如下所示:

代码语言:javascript
运行
复制
[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>
   }
},

我的问题是,它只返回一个字符串,我假设是因为在传递给dangerouslySetInnerHTML={{ __html: markdown }}之前,我没有将markdown转换为HTML。

如何将Markdown转换为HTML,以便可以使用dangerouslySetInnerHTML={{ __html: markdown }}呈现它

EN

Stack Overflow用户

发布于 2019-06-12 21:41:05

在Gatsby中实现这一点的最合适的方法是在Gatsby onCreateNode生命周期钩子中创建子节点。此挂钩仅在nodejs进程中调用,并在下载内容条目时运行一次markdown解析。

这应该可以让您开始--它基于Gatsby的gatsby-transformer-remark中的代码

请注意,这是伪代码-当然,您必须对其进行测试。

代码语言:javascript
运行
复制
// gatsby-node.js

var remark = require('remark')
var recommended = require('remark-preset-lint-recommended')
var html = require('remark-html')

const processor = remark()
  .use(recommended)
  .use(html)

export async function onCreateNode({ actions, node, loadNodeContent}) {
  if (!/RichText/.test(node.internal.type)) {
    return
  }

  const markdown = // somehow load the raw markdown from the node - I haven't studied RichText nodes yet

  const html = processor.process(markdown)

  const markdownNode = {
    id: createNodeId(`${node.id} >>> MarkdownRemark`),
    children: [],
    parent: node.id,
    internal: {
      content: data.content,
      type: `MarkdownRemark`,
    },
  }

  actions.createNode(markdownNode)
  actions.createParentChildLink({ parent: node, child: markdownNode })
}

作为参考,here is where Contentful creates the Rich Text nodes inside Gatsby:

票数 1
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55998067

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档