将Gatsby博客从.md切换到.mdx -现在,博客文章模板不会从.mdx前端返回帖子标题 我的blog-post.js帖子模板 gatsby-node.js gatsby-config.js 示例.mdx 环境

如何解决将Gatsby博客从.md切换到.mdx -现在,博客文章模板不会从.mdx前端返回帖子标题 我的blog-post.js帖子模板 gatsby-node.js gatsby-config.js 示例.mdx 环境

摘要

我按照Thomas Wang的How to convert an existing Gatsby blog to use MDX教程,将我的Gatsby博客从使用.md转换为.mdx并使用gatsby-plugin-mdx

运行gatsby develop时,我的帖子失去了版式和生成的帖子标题(来自.mdx的前题)。

我以前使用的是dangerouslySetInnerHTML和相同的模板(除了上面的教程中指定的更改之外),并且可以正常使用.md文件。

我认为这与<MDXRenderer>{post.body}</MDXRenderer>无关,当使用我的blog-post.js模板创建页面时,忽略了其中的代码。

我已经在gatsby-config的插件选项中声明了默认布局,从而获得了布局,但是我无法找回标题。我知道我可以将标题写到.mdx中,但是我希望它是自动生成的。理想情况下,我想从<Layout />模板内部访问我的blog-post.js组件,这样我也不必从gatsby-config插件选项中进行设置。

编辑

此后,我已经按照Gatsby mdx入门程序的代码更新了blog-post.js中的代码,但是仍然无法获得标题(下面显示了当前代码)。我也在尝试添加下一个/上一个帖子导航,但也没有渲染。任何帮助将不胜感激。

相关信息

我的blog-post.js帖子模板

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

import Layout from "../components/layout"
import { MDXRenderer } from "gatsby-plugin-mdx"
import { rhythm } from "../utils/typography"

class BlogPostTemplate extends React.Component {
  render() {
    const post = this.props.data.mdx
    const { previous,next } = this.props.pageContext
    console.log(this.props.pageContext)

    return (
      <Layout location={this.props.location}>
        <h1>{post.frontmatter.title}</h1>
        <p>{post.frontmatter.date}</p>
        <MDXRenderer>{post.body}</MDXRenderer>
        <hr
          style={{
            marginBottom: rhythm(1),}}
        />

        <ul
          style={{
            display: `flex`,flexWrap: `wrap`,justifyContent: `space-between`,listStyle: `none`,padding: 0,}}
        >
          <li>
            {previous && (
              <Link to={previous.fields.slug} rel="prev">
                ← {previous.frontmatter.title}
              </Link>
            )}
          </li>
          <li>
            {next && (
              <Link to={next.fields.slug} rel="next">
                {next.frontmatter.title} →
              </Link>
            )}
          </li>
        </ul>
      </Layout>
    )
  }
}

export default BlogPostTemplate

export const pageQuery = graphql`
  query($slug: String!) {
    site {
      siteMetadata {
        title
      }
    }
    mdx(fields: { slug: { eq: $slug } }) {
      id
      excerpt(pruneLength: 160)
      frontmatter {
        title
        date(formatString: "MMMM DD,YYYY")
      }
      body
    }
  }
`

gatsby-node.js

const path = require(`path`)
const { createFilePath } = require(`gatsby-source-filesystem`)

exports.onCreateNode = ({ node,getNode,actions }) => {
  const { createNodeField } = actions
  if (node.internal.type === `Mdx`) {
    const slug = createFilePath({ node,basePath: `pages` })
    createNodeField({
      node,name: `slug`,value: slug,})
  }
}

exports.createPages = async ({ graphql,actions }) => {
  const { createPage } = actions
  const result = await graphql(`
    query {
      allMdx {
        edges {
          node {
            fields {
              slug
            }
          }
        }
      }
    }
  `)

  result.data.allMdx.edges.forEach(({ node }) => {
    createPage({
      path: node.fields.slug,component: path.resolve(`./src/templates/blog-post.js`),context: {
        // Data passed to context is available
        // in page queries as GraphQL variables.
        slug: node.fields.slug,},})
  })
}

gatsby-config.js


module.exports = {
  siteMetadata: {
    title: `Oliver Holms`,plugins: [
    {
      resolve: `gatsby-source-filesystem`,options: {
        name: `src`,path: `${__dirname}/src/`,{
      resolve: `gatsby-source-filesystem`,options: {
        name: `images`,path: `${__dirname}/src/images/`,{
      resolve: `gatsby-plugin-mdx`,options: {
        defaultLayouts: {
          posts: require.resolve("./src/templates/blog-post.js"),default: require.resolve("./src/components/layout.js"),extensions: [".mdx",".md"],gatsbyRemarkPlugins: [
          {
            resolve: `gatsby-remark-images`,options: {
              maxWidth: 2000,{
            resolve: `gatsby-remark-responsive-iframe`,options: {
              wrapperStyle: `margin-bottom: 1.0725rem`,`gatsby-remark-copy-linked-files`,`gatsby-remark-smartypants`,],{
      resolve: `gatsby-plugin-typography`,options: {
        pathToConfigModule: `src/utils/typography`,`gatsby-plugin-emotion`,{
      resolve: `gatsby-remark-images`,options: {
        maxWidth: 2000,`gatsby-transformer-json`,`gatsby-transformer-sharp`,`gatsby-plugin-sharp`,{
      resolve: `gatsby-plugin-feed-mdx`,options: {
        query: `
          {
            site {
              siteMetadata {
                title
                description
                siteUrl
                site_url: siteUrl
              }
            }
          }
        `,feeds: [
          {
            serialize: ({ query: { site,allMdx } }) => {
              return allMdx.edges.map(edge => {
                return Object.assign({},edge.node.frontmatter,{
                  description: edge.node.excerpt,date: edge.node.frontmatter.date,url:
                    site.siteMetadata.siteUrl + "/blog" + edge.node.fields.slug,guid:
                    site.siteMetadata.siteUrl + "/blog" + edge.node.fields.slug,custom_elements: [{ "content:encoded": edge.node.html }],})
              })
            },query: `
              {
                allMdx(
                  sort: { order: DESC,fields: [frontmatter___date] },) {
                  edges {
                    node {
                      excerpt
                      html
                      fields { slug }
                      frontmatter {
                        title
                        date
                      }
                    }
                  }
                }
              }
            `,output: "/rss.xml",title: "RSS Feed for www.oliverholms.com",// optional configuration to insert feed reference in pages:
            // if `string` is used,it will be used to create RegExp and then test if pathname of
            // current page satisfied this regular expression;
            // if not provided or `undefined`,all pages will have feed reference inserted
            match: "^/blog/",}

示例.mdx

---
title: "Post Title"
date: "2020-08-01"
---

Body Text

环境

 System:
    OS: macOS 10.15.6
    CPU: (12) x64 Intel(R) Core(TM) i9-8950HK CPU @ 2.90GHz
    Shell: 5.7.1 - /bin/zsh
  Binaries:
    Node: 12.18.1 - /usr/local/bin/node
    npm: 6.14.5 - /usr/local/bin/npm
  Languages:
    Python: 2.7.16 - /usr/bin/python
  Browsers:
    Chrome: 84.0.4147.125
    Safari: 13.1.2
  npmPackages:
    gatsby: ^2.23.12 => 2.24.47
    gatsby-image: ^2.4.16 => 2.4.16
    gatsby-plugin-emotion: ^4.3.10 => 4.3.10
    gatsby-plugin-feed-mdx: ^1.0.1 => 1.0.1
    gatsby-plugin-mdx: ^1.2.34 => 1.2.34
    gatsby-plugin-sharp: ^2.6.27 => 2.6.27
    gatsby-plugin-typography: ^2.5.10 => 2.5.10
    gatsby-remark-copy-linked-files: ^2.3.12 => 2.3.12
    gatsby-remark-images: ^3.3.25 => 3.3.25
    gatsby-remark-responsive-iframe: ^2.4.12 => 2.4.12
    gatsby-remark-smartypants: ^2.3.10 => 2.3.10
    gatsby-source-filesystem: ^2.3.23 => 2.3.24
    gatsby-transformer-json: ^2.4.11 => 2.4.11
    gatsby-transformer-sharp: ^2.5.13 => 2.5.13
  npmGlobalPackages:
    gatsby-cli: 2.12.87

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 &lt;select id=&quot;xxx&quot;&gt; SELECT di.id, di.name, di.work_type, di.updated... &lt;where&gt; &lt;if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 &lt;property name=&quot;dynamic.classpath&quot; value=&quot;tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-