You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在React组件中渲染同目录下的MDX文件内容?

在Gatsby的index.tsx中渲染about.mdx内容的解决方案

要在首页组件中渲染about.mdx的内容,只需调整导入方式并直接使用编译后的MDX组件即可,具体操作如下:

1. 修正MDX文件的导入

将原来的import * as everything from './about.mdx'替换为直接导入默认导出的React组件:

import AboutContent from './about.mdx'

2. 在页面中渲染MDX内容

把代码里的<MDXContent></MDXContent>替换为导入的组件:

<AboutContent />

修改后的完整index.tsx代码

import React from 'react'
import { Link, graphql } from 'gatsby'
import { Wrapper, SectionTitle, Header, SectionSubTitle, SEO } from 'components'
import { Layout } from 'layouts'
import { Content } from 'layouts/components'
import Helmet from 'react-helmet'
import config from 'config/siteConfig'
import Data from 'models/Data'
import styled from 'styled-components'
// 修正MDX导入方式
import AboutContent from './about.mdx'

import { FeaturedPosts } from 'components/FeaturedPost'

interface Props {
  data: Data
}

const HomePage = (props: Props) => {
  const { edges } = props.data.allMdx

  return (
    <Layout>
      <Helmet title={`Blog | ${config.siteTitle}`} />
      <SEO path="/" data={{ title: config.siteTitleAlt }} />
      <Header>
        <SectionTitle>
          {config.siteTitle}
          <Line />
          <SectionSubTitle>{config.siteDescription}</SectionSubTitle>
        </SectionTitle>
      </Header>
      <Wrapper>
        {/* 渲染about.mdx的内容 */}
        <AboutContent />
      </Wrapper>
    </Layout>
  )
}

export default HomePage

export const query = graphql`
  query {
    allMdx(
      sort: { fields: [frontmatter___date, frontmatter___title], order: DESC }
      limit: 10
    ) {
      totalCount
      edges {
        node {
          fields {
            path
          }
          frontmatter {
            title
            date(formatString: "MMMM D, YYYY")
            standardDate: date(formatString: "YYYY-MM-DD")
          }
          excerpt(pruneLength: 200)
          timeToRead
        }
      }
    }
  }
`

const Line = styled.hr`
  color: white;
  width: 5rem;
  margin: 0.5rem auto;
  height: 3px;
`

const Title = styled.span`
  margin-right: 0.5rem;
`

const DateTag = styled.time`
  color: rgba(0, 0, 0, 0.5);
`

原理说明

Gatsby的MDX插件会自动将.mdx文件编译为React组件,文件的默认导出就是可直接使用的组件,因此无需额外处理MDX内容解析,直接导入并像普通React组件一样使用即可。

内容的提问来源于stack exchange,提问作者NobinPegasus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 17:05:48