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

使用Gatsby的useStaticQuery获取数据返回undefined问题排查

问题原因与解决方案

核心问题是你对useStaticQuery的返回值解构错误了。

useStaticQuery执行后,返回的直接就是GraphQL查询结果里的data对象(也就是你在playground里看到的{allFile: ...}这部分),而不是嵌套了一层data的结构。你代码里写的const { data } = useStaticQuery(...),相当于从返回值里去读取data属性,但返回值本身没有这个属性,所以拿到的data自然是undefined。

修正后的代码示例

直接接收整个返回值作为data:

import React from "react";
import { useStaticQuery, graphql} from "gatsby";

export default function MenuMD () {
    // 直接赋值,不再解构data
    const data = useStaticQuery(
    graphql`
      query {
                allFile(filter: {sourceInstanceName: {eq: "markdown"}}) {
                    edges {
                        node {
                            childrenMarkdownRemark {
                                frontmatter {
                                    slug
                                    title
                                }
                            }
                        }
                    }
                }
      }
    `
    )
    console.log('static data', data); // 现在就能拿到正确的allFile数据了

    return<>Menu from MarkDown</>
}

或者也可以直接解构出allFile,更简洁:

const { allFile } = useStaticQuery(graphql`...`)
console.log('static data', allFile);

额外验证点

如果修正后还是有问题,可以检查:

  • 确保你的Markdown文件确实被Gatsby正确识别,sourceInstanceName配置的markdown和gatsby-config.js里的设置一致
  • 重启Gatsby开发服务器,有时候缓存会导致查询不更新

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 01:00:48