Исходный плагин Gatsby показывает только последний элемент в массиве в GraphQL

Когда я запускаю журнал консоли после запуска сборки, в моем массиве напитков появляются 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 можно использовать для создания анимаций и игр на веб-страницах.


1
274
1

Ответ:

Решено

Я столкнулся с той же проблемой, что и вы, несколько месяцев назад, и в моем случае мне нужно было установить допустимый внутренний id для каждого элемента, чтобы позволить GraphQL создать правильную схему для каждого узла, если нет, id переопределяется в каждом элементе, и он принимает только последний.

В вашем случае кажется, что какое-то поле неверно, что делает следующее выражение недействительным:

    id: createNodeId(`${NODE_TYPE }-${drink.id}`),

Попробуйте отладить больше того, что получает, и изменить его на какое-то жестко заданное значение. Что-то вроде:

    id: drink.id,

Имейте в виду, что если id разные для каждого узла, вам не нужно использовать createNodeId API для целей отладки (но это рекомендуется).