graphql - 在页面末尾使用命名导出时,Gatsy 页面查询无法正常工作。为什么?
问题描述
我在 Gatsby 中有以下页面模板。
import React from 'react';
import { graphql } from 'gatsby';
import Layout from '../components/layout';
const PageTemplate = props => {
const { wordpressPage: currentPage } = props.data;
return (
<Layout>
<h1 dangerouslySetInnerHTML={{ __html: currentPage.title }} />
<div dangerouslySetInnerHTML={{ __html: currentPage.content }} />
</Layout>
);
};
export const pageQuery = graphql`
query($id: String!) {
wordpressPage(id: { eq: $id }) {
title
content
date(formatString: "MMMM DD, YYYY")
}
site {
id
siteMetadata {
title
}
}
}
`;
export default PageTemplate;
哪个按预期工作(取自教程),但是我倾向于在页面末尾进行所有导出,如下所示:
import React from 'react';
import { graphql } from 'gatsby';
import Layout from '../components/layout';
const PageTemplate = props => {
const { wordpressPage: currentPage } = props.data;
return (
<Layout>
<h1 dangerouslySetInnerHTML={{ __html: currentPage.title }} />
<div dangerouslySetInnerHTML={{ __html: currentPage.content }} />
</Layout>
);
};
const pageQuery = graphql`
query($id: String!) {
wordpressPage(id: { eq: $id }) {
title
content
date(formatString: "MMMM DD, YYYY")
}
site {
id
siteMetadata {
title
}
}
}
`;
export default PageTemplate;
export { pageQuery }
但是,这不起作用-props.data
是undefined
。这是一个微妙的区别,但为什么这会导致 pageQuery 不执行?
解决方案
这个答案是对提到出口顺序的@hexangel616 的补充说明:
我相信 pageQuery 必须在 PageTemplate 之前导出,因为它被它使用。
您导出的 GraphQL 查询在gatsby 构建过程中具有特殊作用。从文档:
在高层次上,在整个引导和构建过程中发生的事情是:
节点对象来自您在 gatsby-config.js 中使用插件以及在 gatsby-node.js 文件中定义的任何源
从 Node 对象推断出架构
页面是基于您网站或已安装主题中的 JavaScript 组件创建的
提取并运行 GraphQL 查询以提供所有页面的数据
在公共目录中创建并捆绑静态文件
TLDR:为了让 gatsby 正确构建,您的所有 graphql 导出都必须井井有条。
推荐阅读
- java - 无法在 Java 应用程序中实现 DAO 设计模式
- python-3.x - 是否可以“自定义”python?
- dictionary - Ansible 构建字典列表并附加到字典中的列表
- reactjs - setState 到嵌套对象删除值
- javascript - 如何切换 React 列表中的按钮?
- swiftui - Image view 如何在 SWiftUI 中通过 URL 显示照片?
- javascript - Safari — 在前几个之后无法创建振荡器
- java - 调用 response.getStatus 时响应为 NULL,客户端不是针对 web 服务中的内容吗?
- c++ - 友元非成员函数出错,导致分段错误
- amazon-web-services - 如何在我的新 CloudFormation 模板中引用现有角色?