Когда я запускаю журнал консоли после запуска сборки, в моем массиве напитков появляются 6 объектов. Они также появляются, когда я запускаю разработку. Но когда я запрашиваю graphQL, доступен только последний объект в моем массиве. Я новичок в gatsby и graphQL, поэтому включил изображение на случай, если мой запрос был отключен. Код взят из моего файла gatsby-node.js:
exports.sourceNodes = async (
{ actions, createContentDigest, createNodeId,}
) => {
const NODE_TYPE = "CocktailRecipes";
try{
const response = await fetch(`https://www.thecocktaildb.com/api/json/v1/1/search.php?s=vodka`)
const data = await response.json();
const {drinks} = data;
console.info(drinks)
drinks.forEach((drink) => {
actions.createNode({
...drink,
id: createNodeId(`${NODE_TYPE }-${drink.id}`),
parent:null,
children:[],
internal:{
type:NODE_TYPE,
content:JSON.stringify(drink),
contentDigest: createContentDigest(drink)
}
})
})
}
catch(error){
console.info("ERROR")
console.info(error)
}
}
в graphQL отображается только один объект
Если бы кто-нибудь мог помочь, это было бы очень признательно, так как я уже некоторое время бьюсь головой о стену. Я сделал гэтсби чистой. Я пробовал карту вместо forEach
🤔 А знаете ли вы, что...
JavaScript можно использовать для создания анимаций и игр на веб-страницах.
Я столкнулся с той же проблемой, что и вы, несколько месяцев назад, и в моем случае мне нужно было установить допустимый внутренний id
для каждого элемента, чтобы позволить GraphQL создать правильную схему для каждого узла, если нет, id
переопределяется в каждом элементе, и он принимает только последний.
В вашем случае кажется, что какое-то поле неверно, что делает следующее выражение недействительным:
id: createNodeId(`${NODE_TYPE }-${drink.id}`),
Попробуйте отладить больше того, что получает, и изменить его на какое-то жестко заданное значение. Что-то вроде:
id: drink.id,
Имейте в виду, что если id
разные для каждого узла, вам не нужно использовать createNodeId API для целей отладки (но это рекомендуется).