1.查数据

注意,这里跟前面不一样了,我用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        },       })    })  })}

很清晰明显,这里就说一点我传递了一个参数,pathSlug到内容页。

2.创建内容页模板

在src>templates下创建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 }} />    </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;

这里只要对应的路径的那个文章查询

frontmatter: { path: { eq: $pathSlug } }