自动为 Gatsby网站中的 Markdown 页面添加 sidebar

0 简介

我想在Gatsby网站上创建Markdown页面时自动添加侧边栏。
有一个 starter “ gatsby-gitbook-starter” 可以支持markdown文件的侧边栏,但仅支持1级。 我希望能够支持更多级别。

你可以通过下面的命令安装这个starter。

gatsby new gatsby-gitbook-starter https://github.com/hasura/gatsby-gitbook-starter

相关文档可以在这里找到 this link

1. 从 “gatsby-gitbook-starter” 学到的

1.1 如何获取 markdown files 相关的数据

// in /src/templates/docs.js
export const pageQuery = graphql`
  query($id: String!) {
    site {
      siteMetadata {
        title
        docsLocation
      }
    }
    mdx(fields: { id: { eq: $id } }) {
      fields {
        id
        title
        slug
      }
      body
      tableOfContents
      parent {
        ... on File {
          relativePath
        }
      }
      frontmatter {
        metaTitle
        metaDescription
      }
    }
    allMdx {
      edges {
        node {
          fields {
            slug
            title
          }
        }
      }
    }
  }
`;

tableOfContents 就是 sidebar navigation 需要的数据.
可以 GraphiQL query 来查看.
在这里插入图片描述

为了简便起见,使用下面的 sample data:


a={
   
  "tableOfContents": {
   
   "items": [
     {
   
       "url": "#heading-h11",
       "title": "Heading H11"
     },
     {
   
       "url": "#heading-h12",
       "title": "Heading H12",
       "items": [
         {
   
           "url": "#heading-h2",
           "title": "Heading H2",
           "items": [
             {
   
               "url": "#heading-h3",
               "title": "Heading H3",
             }
           ]
         }
       ]
     }
   ] 
 }
};
b = a.tableOfContents.items;


1.2 如何把数据转化为 component

// in /src/components/rightSidebar.js

             if (item.node.tableOfContents.items) {
   
               innerItems = item.node.tableOfContents.items.map((innerItem, index) => {
   
                  const itemId = innerItem.title
                   ? innerItem.title.replace(/\s+/g, '').toLowerCase()
                   : &#
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值