如何在 Gatsby 中显示包含 HTML 语法的 Markdown 文件?

How to display Markdown files containing HTML syntax in Gatsby?

我正在使用 Markdown 文件为 gatby 生成页面。为了控制图片的风格,我使用了html语法。但是gatsby生成的页面不显示html部分。

这是我的降价文件:

---
......frontmatter......
--- 
......content......
<table>
  <tr>
    <td><img src="./images/2018/zotero/ZoteroWebDAV.png"></td>
    <td><img src="./images/2018/zotero/ZoteroExts.png" width=100%></td>
  </tr>
</table>
......content......

其他都正常渲染,但是table和里面的图片都不显示。这是我的盖茨比-config.js.

{
      resolve: `gatsby-transformer-remark`,
      options: {
        excerpt_separator: `<!-- endexcerpt -->`,
        plugins: [
          // 'gatsby-remark-relative-images',
          {
            resolve: `gatsby-remark-images`,
            options: {
              maxWidth: 1200,
            },
          },
          {
            resolve: `gatsby-remark-image-attributes`,
            options: {
              dataAttributes: true
            }
          },
        ],
      },
    },

如何使Markdown中的html部分正常渲染?

您也可以使用 built-in dangerouslySetInnerHtml property or any markdown parser like markdown-to-jsx

使用第一种方法,遵循 Gatsby's guides:

import React from "react"
import { graphql } from "gatsby"

export default function Template({data}) {
  const { markdownRemark } = data // data.markdownRemark holds your post data
  const { frontmatter, html } = markdownRemark
  return (
    <div className="blog-post-container">
      <div className="blog-post">
        <h1>{frontmatter.title}</h1>
        <h2>{frontmatter.date}</h2>
        <div
          className="blog-post-content"
          dangerouslySetInnerHTML={{ __html: html }}
        />
      </div>
    </div>
  )
}

export const pageQuery = graphql`
  query($id: String!) {
    markdownRemark(id: { eq: $id }) {
      html
      frontmatter {
        date(formatString: "MMMM DD, YYYY")
        slug
        title
      }
    }
  }
`

因为您没有分享您的查询,所以我使用了指南中的查询,但可以根据需要进行调整。如您所见,frontmatter 末尾的所有内容都是 html:

<div
  className="blog-post-content"
  dangerouslySetInnerHTML={{ __html: html }}
/>

使用第二种方法,并遵循前面的查询结构,html 应呈现为:

import Markdown from 'markdown-to-jsx';
import React from 'react';

<Markdown>{html}</Markdown>

如果有任何障碍,我会说第二种方法更好,因为正如 dangerouslySetInnerHTML 名称所暗示的那样,您可能会将您的网站暴露给 XSS (Cross-Site Scripting),而第二种方法会清理实施。