#graphql #gatsby
#graphql #gatsby
Вопрос:
Я получаю эту ошибку: переменная «$ productSlug» никогда не используется в операции «SingleProduct».
Я также использую gatsby-source-wordpress для запроса полей из wordpress в gatsby. Я также удалил Gatsby и переустановил его, чтобы посмотреть, работает ли он в разных версиях, но это не так.
Я искал ответ по всему Интернету и переполнению стека, я действительно считаю, что это должна быть ошибка с Gatsby или gatsby-source-wordpress,
это код:
const path = require("path");
const { createFilePath } = require(`gatsby-source-filesystem`);
exports.onCreatePage = ({ page, actions }) => {
const { createPage } = actions;
if (page.path.match(/products/)) {
page.context.layout = "ArchiveProduct";
createPage(page);
}
if (page.path.match(/products/([^/] $)/)) {
page.context.layout = "SingleProduct";
createPage(page);
}
};
exports.onCreateNode = ({ node, getNode, actions }) => {
const { createNodeField } = actions;
if (node.internal.type === `allWpProduct`) {
const slug = createFilePath({ node, getNode, basePath: `pages` });
createNodeField({
node,
name: `slug`,
value: slug,
});
}
};
exports.createPages = async function ({ graphql, actions }) {
const { data } = await graphql(`
query SingleProduct {
allWpProduct {
nodes {
uri
slug
id
}
}
}
`);
data.allWpProduct.nodes.forEach((node) => {
// const slug = node.slug;
actions.createPage({
path: "/products/" node.slug,
component: path.resolve("./src/templates/SingleProduct.js"),
context: {
productSlug: node.slug,
productId: node.id,
layout: "SingleProduct",
},
});
});
};
И это запрос:
export const query = graphql`
query SingleProduct($productSlug: String!) {
wpProduct(slug: { eq: "$productSlug" }) {
title
slug
link
id
date(formatString: "MMMM DD, YYYY")
product {
description
price
slug
photo {
localFile {
childImageSharp {
gatsbyImageData
}
}
}
}
}
}
`;
Ответ №1:
Попробуйте следующее:
export const query = graphql`
query SingleProduct($productSlug: String!) {
wpProduct(filter: {slug: { eq: "$productSlug" }}) {
title
slug
link
id
date(formatString: "MMMM DD, YYYY")
product {
description
price
slug
photo {
localFile {
childImageSharp {
gatsbyImageData
}
}
}
}
}
}
`;
Ваша проблема возникает из $productSlug
-за того, что она правильно устраняется через контекст, но никогда не используется в каком-либо действии фильтрации внутри запроса.
Я бы рекомендовал вам проверить это раньше на игровой площадке GraphiQL, жестко $productSlug
запрограммировав для проверки выходных данных.
Комментарии:
1. он все еще не работает, он выдает мне ту же ошибку: переменная «$productSlug» никогда не используется в операции «SingleProduct» graphql / template-strings
2. Вы пробовали это на игровой площадке graphiql, как я предложил (
localhost:8000/___graphql
)? Проверьте фильтры и доступные там узлы3. Да, я пробовал оба /_graphql и /___graphql, может быть, это версия Гэтсби? Поскольку это работает на другом сайте, я использовал эту переменную, созданную с помощью Gatsby…