Nano Hash - криптовалюты, майнинг, программирование

Запросы GraphQL с несколькими псевдонимами и Apollo (Vue.js)

Я пытаюсь получить данные из одного типа коллекции моего бэкэнда Strapi в проект Vue.js с помощью Apollo. Он хорошо работает с одним псевдонимом, но у меня проблемы с его работой с несколькими псевдонимами.

Я получаю свои данные из кампаний коллекционного типа, которые имеют логическое поле архива. Я хочу создать массив кампаний, содержащий все кампании, которые не были заархивированы (archive = false), а также массив архива, содержащий все заархивированные (archive = true).

Это мой код:

import gql from "graphql-tag";

export default {
  name: "Campaigns",
  data() {
    return {
      campaigns: [],
      archive: []
    };
  },
  apollo: {
    campaigns: gql`
      query getCampaigns {
        campaigns: campaigns(where: { archive: "false" }, sort: "order:DESC") {
          name
          url
        }
        archive: campaigns(where: { archive: "true" }, sort: "order:DESC") {
          name
          url
        }
      }
    `
  }

Запрос возвращает массив кампаний, но массив архива по-прежнему пуст.

Я пробовал переключаться (сначала поместил псевдоним архива, переключил логические значения, чтобы убедиться, что я могу вообще получить доступ к данным заархивированных кампаний и т. Д.). Проблема, по-видимому, связана с псевдонимом архива.

Когда я использую тот же запрос с площадкой Strapi GraphQL, я получаю желаемый результат:

{
  campaigns: campaigns(where: { archive: "false" }, sort: "order:DESC") {
    name
  }
  archive: campaigns(where: { archive: "true" }, sort: "order:DESC") {
    name
  }
}

... возвращается ...

{
  "data": {
    "campaigns": [
      {
        "name": "2020"
      },
      {
        "name": "2019"
      },
      {
        "name": "2018"
      },
      {
        "name": "2017"
      }
    ],
    "archive": [
      {
        "name": "2016"
      },
      {
        "name": "2015"
      }
    ]
  }
}

Как я могу заставить запрос работать в Vue.js с Apollo?

28.06.2020

Ответы:


1

Думаю, я нашел решение. Технически говоря, я предполагаю, что это отдельные запросы (которые, если я прав, нарушают назначение псевдонимов), но они делают то, что я хочу:

  apollo: {
    campaigns: {
      query: gql`
        query {
          campaigns: campaigns(
            where: { archive: "false" }
            sort: "order:desc"
          ) {
            name
            url
          }
        }
      `
    },
    archive: {
      query: gql`
        query {
          archive: campaigns(where: { archive: "true" }, sort: "order:desc") {
            name
            url
          }
        }
      `
    }
  }

Очевидно, при некоторых обстоятельствах инициализация apollo: {XYZ: и запрос псевдонима {XYZ: должны совпадать. Я видел в документации, что они не обязательно должны совпадать, но я не совсем понимаю, когда и почему.

Думаю, я не могу точно сказать, что делает начальный параметр.

28.06.2020

2

Вы используете campaigns в качестве ключа для всего запроса, поэтому вам нужно инициализировать свои данные следующим образом:

data() {
  return {
    campaigns: {
      campaigns: [],
      archive: [],
    },
  };
},

Затем вы можете получить доступ к каждому списку с помощью ключа (т.е. campaigns.campaigns и campaigns.archive).

28.06.2020
  • Спасибо! Вы уверены? Когда я инициализирую данные таким образом, я все еще не могу получить доступ к campaigns.campaigns или campaigns.archive, если на то пошло. Я все еще могу получить доступ к campaigns, как и раньше, а archive пуст. Кроме того, когда я проверяю дерево Vue с помощью инструментов разработчика, все, что я вижу, это ... $ apolloData ›campaign: Array [4]› 4 объекта, содержащих 2017-2020 гг. То же, что и данные ниже. 28.06.2020
  • Стрелять. Извините, прошло немного времени с тех пор, как я последний раз использовал Vue. Я думаю, что для нескольких запросов вам, возможно, придется использовать параметр result для установки вручную данные сами, и в этом случае вы все равно можете инициализировать их как {campaigns: [], archive: []}, как вы это делали изначально. 28.06.2020
  • Хм, синтаксис меня действительно сбивает с толку. Я заметил, что некоторые термины должны совпадать, чтобы запрос работал, но я не совсем уверен, почему. Кажется, я не могу осмыслить вложенность и то, что соответствует структуре запроса. Мне также интересно, изменился ли синтаксис в какой-то момент, потому что я продолжаю читать, что документы, на которые есть ссылки, устарели, и я пробовал вещи из руководств, и это просто не сработало ... Когда я использую результат или обновление, свойство данных, по-видимому, не определено. 28.06.2020

  • 3

    Я считаю, что лучший способ сделать это - использовать свойство update: https://apollo.vuejs.org/guide/apollo/queries.html#name-matching

    apollo: {
        campaigns: {
          query: gql`
            query {
              campaigns: campaigns(
                where: { archive: "false" }
                sort: "order:desc"
              ) {
                name
                url
              }
            }
          `
        },
        archive: {
          update: data => data.campaigns,
          query: gql`
            query {
              campaigns(where: { archive: "true" }, sort: "order:desc") {
                name
                url
              }
            }
          `
        }
      }
    
    27.05.2021
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..