Gatsby極速入門—添加上一頁下一頁功能(完結篇)

1.調整gatsby-node

這個就簡單了,打開gatsby-node.js,增加代碼如下:

const path = require("path");
exports.createPages = ({ actions, graphql }) => {
  const { createPage } = actions
  const blogPostTemplate = path.resolve(`src/templates/blogPost.js`)
  return graphql(`
    {
      allMarkdownRemark {
        edges {
          node {
            frontmatter {
              path,
              title,
              tags
            }
          }
        }
      }
    }
  `).then(result => {
    if (result.errors) {
      return Promise.reject(result.errors)
    }
    const posts = result.data.allMarkdownRemark.edges;
    createTagPages(createPage, posts);
    posts.forEach(({ node }, index) => {
      const path = node.frontmatter.path;
      const title = node.frontmatter.title;
      createPage({
        title,
        path,
        component: blogPostTemplate,
        context: {
          pathSlug: path,
          //這裏是新增加的
          prev: index === 0 ? null : posts[index - 1].node,
          next: index === (posts.length - 1) ? null : posts[index + 1].node
        }, // additional data can be passed via context
      })
    })
  })
}

2.調整blogPost.js

import React from "react"
import { graphql,Link } from 'gatsby'
const Template = ({ data, pageContext }) => {
  const {next,prev} = pageContext;
  const {markdownRemark} = data;
  const title = markdownRemark.frontmatter.title;
  const html = markdownRemark.html;
  return (

    <div style={{
      display: 'flex',
      flexDirection: 'column',
      alignItems: 'center'
    }}>
      <h1>{title}</h1>
      <div dangerouslySetInnerHTML={{ __html: html }} />
      
      {next&&<Link to={next.frontmatter.path}>Next</Link>}
      {prev&&<Link to={prev.frontmatter.path}>Prev</Link>}
    </div>
  )
}

export const query = graphql`
  query($pathSlug: String!) {
    markdownRemark(frontmatter: { path: { eq: $pathSlug } }) {
      html
      frontmatter {
        date(formatString: "MMMM DD, YYYY")
        path
        title
      }
    }
  }
`
export default Template;

打開首頁,點擊頁面跳轉到對應的頁面大功告成。

總結

到此,通過gatsby就快速的搭建了一個博客網站,我們只需書寫markdown文件就能生成對應的網頁了。至於網頁美化,那是切圖的事兒,我就不在這裏墨跡了。

當然了你不想切圖可以使用各種現成的UI庫,比如antdesign。我的網站就是直接用的antdesign.

如果你覺得深入學習gatsby太麻煩,你可以直接用我寫好的模板就行,

開源庫地址,直接克隆就可以用了:

https://github.com/leolau2012...

但是基礎還是要會的,不然出錯或者要根據你們公司需求改動功能,就沒辦法了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章