Вы не можете выполнять интерполяцию строк или что-либо подобное в статических запросах. Причина в том, что статический запрос должен быть известен во время сборки. Вот когда это выполняется. Он запускается, когда вы создаете сайт, а не когда сайт работает. Это статическая часть не только StaticQuery, но и Гэтсби в целом. PageQueries может не иметь «статического» в них, но они также запускают время сборки. Единственное отличие состоит в том, что они допускают использование аргументов, будь то иначе, чем вы пытаетесь сделать это здесь.
Если это на какой-то автоматически сгенерированной странице с использованием createPages
APIВы должны передать какой-то идентификатор на страницу, который он затем может использовать в PageQuery для извлечения данных. Из того, что я могу сказать здесь, это не похоже, что это элемент вашей страницы. Это нижняя часть блога, где вы показываете некоторые детали об авторе? Похоже, у вас есть отдельная сущность для ваших авторов и страниц вашего блога. Это хорошо. Один из способов добиться этого - убедиться, что вы запрашиваете всю необходимую информацию в своем PageQuery. Если у вас есть данные в компоненте вашей страницы, вы можете просто передать их своим дочерним элементам. Вам просто нужно получить все необходимые идентификаторы для PageComponent, используя контекст. Вот как это показано в документации Гэтсби:
exports.createPages = ({ graphql, actions }) => {
const { createPage } = actions
const blogPostTemplate = path.resolve(`src/templates/blog-post.js`)
return graphql(`
query loadPagesQuery ($limit: Int!) {
allMarkdownRemark(limit: $limit) {
edges {
node {
frontmatter {
slug
}
}
}
}
}
`, { limit: 1000 }).then(result => {
if (result.errors) {
throw result.errors
}
result.data.allMarkdownRemark.edges.forEach(edge => {
createPage({
path: `${edge.node.frontmatter.slug}`,
component: blogPostTemplate,
context: {
// You need the something to query the author by, and something to query
// the blog post by.
author: edge.node.frontmatter.authorId, // or whatever you use to identify authors
slug: edge.node.frontmatter.slug
},
})
})
})
}
Обратите внимание на две переменные, переданные внутри объекта контекста. Теперь внутри вашего элемента страницы у вас есть эти две переменные, которые вы можете передать в свой запрос. Переменная $ autorId и переменная $ slug. На странице блога вам понадобится содержание поста в блоге, но я уверен, что вы уже позаботились об этой части, а также сведения об авторе, чтобы показать информацию об авторе. В PageQuery вы можете просто запросить две сущности. Один для поста в блоге, другой для автора.