【发布时间】:2020-12-25 19:13:14
【问题描述】:
我创建了一个请求站点和页面级元数据的 React 静态查询挂钩。目前,我在每个页面构建中都复制此代码,因为查询的一部分从页面到页面allProductsJson、allProductJson 等发生变化。我想知道是否可以通过使用查询功能来删除这种重复更有效率?我读过 Gatsby 静态查询不支持参数,但也许有一种方法可以查询所有元数据并按页面过滤?
重复查询挂钩示例:
import { graphql, useStaticQuery } from 'gatsby';
import pageMetadataSelector from 'utils/page-metadata-selector';
import siteMetadataSelector from 'utils/site-metadata-selector';
import getAbsoluteUrl from 'utils/get-absolute-url-path';
const QUERY = graphql`
{
pageMetadata: allProductsJson {
nodes {
metadata {
title
description
image {
publicURL
}
robots
}
}
}
site {
siteMetadata {
siteUrl
}
}
}
`;
const usePageMetadataQuery = ({ location }) => {
const { pageMetadata, site } = useStaticQuery(QUERY);
const pageData = pageMetadataSelector(pageMetadata);
const { siteUrl } = siteMetadataSelector(site);
return {
metadata: {
...pageData,
siteUrl: getAbsoluteUrl(siteUrl, location.pathname),
image: getAbsoluteUrl(siteUrl, pageData.image.publicURL)
}
};
};
export default usePageMetadataQuery;
【问题讨论】:
-
准备外部gql文件,导入(gql loader),按参数选择/选择
-
你能用一个例子解释一下吗@xadm
-
github.com/apollographql/graphql-tag#importing-graphql-files ... gatsby 特定 gatsbyjs.com/plugins/gatsby-plugin-graphql-loader .. 但您在构建时需要它
-
@xadm 我想在构建时进行查询,看起来这个插件不支持:> 这不适用于:加载构建时使用的查询。
-
是的,我写了...第一个链接而不是信息或手动配置...以及更合适的插件使用gatsbyjs.com/plugins/gatsby-plugin-graphql-tag-loader