Я только начал работать с Гэтсби, чтобы посмотреть, будет ли хорошим вариантом перестроить веб-сайт CraftCMS моей компании с Craft в качестве бэкэнда и Gatsby в качестве внешнего интерфейса. Пока что все работало хорошо, пока не пришло время запрашивать отдельные записи в нашем канале «кампании».
Для записи я смог отобразить полный список, используя .map () для каждой из записей моей кампании на странице "Общий вид", чтобы просмотреть все кампании. Я также смог рекурсивно создать каждую страницу кампании, чтобы она вызывала мой шаблон /src/templates/campaign-page.js и у меня была правильная ссылка на Craft API моего сайта без каких-либо проблем. По какой-то причине я просто не могу получить данные моей отдельной кампании для запроса в шаблоне campaign-page.js.
Я прочитал почти каждую страницу в документах Gatsby и каждый учебник, который в настоящее время существует,но я не могу понять, почему мой запрос GraphQL не будет фильтровать отдельные записи кампании. Он просто говорит мне: «Ошибка ожидаемого GraphQL типа [String], найдено {eq: $ slug}».
Я также пытался обернуть мой "slug: {eq: $ slug}" в "filter:" на основе некоторых документов по уценке, но это просто говорит мне, что "filter" не существует. Я начинаюдумать, что проблема в моем файле gatsby-node.js, но я не вижу никаких проблем при сравнении с документами.
Gatsby-node.js
const path = require(`path`)
exports.createPages = async ({ actions, graphql }) => {
const { data } = await graphql(`
query {
api {
entries(section: "campaigns") {
slug
}
}
}
`)
data.api.entries.forEach(({ slug }) => {
actions.createPage({
path: "/campaigns/" + slug,
component: path.resolve(`./src/templates/campaign-page.js`),
context: {
slug: slug,
},
})
})
}
Campaign-page.js
export default ({data}) => {
const post = data.api.entries
return(
<div className={"campaign-page-single"} style={{marginTop: '-21px,'}}>
<Header/>
<div>
<h1>{post.id}</h1>
</div>
</div>
)
}
export const campaignQuery = graphql`
query ($slug: String!){
api{
entries (slug: { eq: $slug }){
slug
id
... on API_campaigns_campaigns_Entry {
id
campaignTitle
slug
}
}
}
}
`
Для справки, вот как выглядит типичный рабочий запрос на моей основной странице campaigns.js, в которой перечислены все доступные кампании:
query = {graphql`
{
api {
entries(section: "campaigns") {
... on API_campaigns_campaigns_Entry {
id
campaignTitle
uri
slug
}
}
}
}
`}
Я ожидаю, что мойШаблон /src/templates/campaign-page.js для отображения отдельных данных кампании.