Vue Apollo запрашивает отдельный элемент с идентификатором

#vue.js #graphql #typeerror #vue-apollo

#vue.js #graphql #ошибка типа #vue-apollo

Вопрос:

Я пытаюсь запросить один продукт с помощью Vue Apollo, но я не понимаю, что я делаю не так. В консоли я получаю следующую ошибку: Observable.js?a7b2:65 Uncaught TypeError: Cannot read property 'product' of undefined

Запрос:

 export const getProduct = gql`
  query getProduct ($productId: ID!) {
    product (where: {id: $productId}) {
      id
      title
      description
      price
      productDetails {
        html
      }
      productAssets {
        id
        url
      }
    }
  }
`;
  

Компонент:

 apollo: {
  $loadingKey: 'loading',
  products: {
    query: getProduct,
    variables: {
      $productId: 'ABC123',
    },
    result ({data}) {
      this.loading = false;
      this.product = data.product;
      this.assets = data.assets;
    },
    error () {
      this.error = true;
      this.sentryError = error;
    },
  },
},
  

Если я, однако, жестко закодирую идентификатор, это сработает.

 export const product = gql`
  query getProduct ($product: ID!) {
    product (where: {id: "ABC123"}) {
      id
      title
      description
      price
      productDetails {
        html
      }
      productAssets {
        id
        url
      }
    }
  }
`;
  

Я не вижу, чего мне не хватает, любая помощь будет очень признательна.

Комментарии:

1. variables: { productId: 'ABC123' } , ?

Ответ №1:

Во-первых, могут потребоваться аргументы. Вы установили, что $product: ID! (by ! ) является обязательным.

Playground — параметры для выполнения запроса:

1. ЗАПРОС с помощью «жесткого кода»

«Если я, однако, жестко закодирую идентификатор, это сработает»

Это первый способ (вы объявляете аргумент вручную в своем запросе).

2. Вкладка «ПЕРЕМЕННЫЕ ЗАПРОСА»

Нажмите [ПЕРЕМЕННЫЕ ЗАПРОСА] и передайте переменные vars в формате JSON.

введите описание изображения здесь

дополнительное чтение переменных graphql:

Vue — запрос с параметрами:

 // Apollo-specific options
apollo: {
  // Query with parameters
  ping: {
    // gql query
    query: gql`query PingMessage($message: String!) {
      ping(message: $message)
    }`,
    // Static parameters
    variables: {
      message: 'Meow',
    },
  },
},
  

https://apollo.vuejs.org/guide/apollo/queries.html#query-with-parameters