Apollo-client - ошибка: не удается найти поле allLinks({}) для объекта (ROOT_QUERY)

ОС: Windows 10 Pro
Браузер: Opera 47.0.2631.71 (PGO)
Аполлон-клиент: 1.9.2
subscription-transport-ws: 0.6.0
vue: 2.4.2
vue-apollo: 2.1.0-rc.5

Итак, я испытываю вышеупомянутую ошибку при попытке выполнить запрос с конечной точкой graphcool. Эта проблема возникает только при попытке проголосовать за вновь созданный элемент ссылки. В чем здесь проблема?

Полная ошибка:

"allLinks({\"first\":5,\"skip\":0,\"orderBy\":\"createdAt_DESC\"})": [
    {
      "type": "id",
      "id": "Link:cj7ui2wn78joh0118s471fvgs",
      "generated": false
    },
    {
      "type": "id",
      "id": "Link:cj7ue9p2pyk9e0118w9dc3eav",
      "generated": false
    },
    {
      "type": "id",
      "id": "Link:cj7uaj5vwsa5b0126inei4jz0",
      "generated": false
    },
    {
      "type": "id",
      "id": "Link:cj7toqpwstxmp0168exm6lihp",
      "generated": false
    },
    {
      "type": "id",
      "id": "Link:cj7too3wgteq20154ax1agats",
      "generated": false
    }
  ],
  "_allLinksMeta": {
    "type": "id",
    "id": "$ROOT_QUERY._allLinksMeta",
    "generated": true
  },
  "allLinks({\"first\":5,\"skip\":5,\"orderBy\":\"createdAt_DESC\"})": [
    {
      "type": "id",
      "id": "Link:cj7toe2egt9j40115r74dzmzi",
      "generated": false
    },
    {
      "type": "id",
      "id": "Link:cj7to769uslpc0163giiymaeq",
      "generated": false
    },
    {
      "type": "id",
      "id": "Link:cj7tdamdkb2c401074qhjw2ig",
      "generated": false
    },
    {
      "type": "id",
      "id": "Link:cj7qlm4qb8vd501967t9jkvix",
      "generated": false
    },
    {
      "type": "id",
      "id": "Link:cj7qawaic5wgz0133mzzqvmat",
      "generated": false
    }
  ]
}.
    at readStoreResolver (readFromStore.js?f639:42)
    at executeField (graphql.js?206d:74)
    at eval (graphql.js?206d:31)
    at Array.forEach (<anonymous>)
    at executeSelectionSet (graphql.js?206d:26)
    at graphql (graphql.js?206d:20)
    at diffQueryAgainstStore (readFromStore.js?f639:75)
    at readQueryFromStore (readFromStore.js?f639:18)
    at TransactionDataProxy.readQuery (proxy.js?d9b2:114)
    at VueComponent.updateStoreAfterVote (LinkItem.vue?42d3:51)
tryFunctionOrLogError @ errorHandling.js?e4be:7
data @ store.js?2706:115
apolloReducer @ store.js?8997:42
combination @ combineReducers.js?a3f5:120
computeNextEntry @ VM314:2
recomputeStates @ VM314:2
(anonymous) @ VM314:2
dispatch @ createStore.js?8c3f:165
dispatch @ VM314:2
(anonymous) @ ApolloClient.js?f973:237
(anonymous) @ store.js?8997:16
(anonymous) @ QueryManager.js?2cbe:142
Promise resolved (async)
(anonymous) @ QueryManager.js?2cbe:127
QueryManager.mutate @ QueryManager.js?2cbe:124
ApolloClient.mutate @ ApolloClient.js?f973:197
mutate @ vue-apollo.esm.js?1632:3069
voteForLink @ LinkItem.vue?42d3:38
boundFn @ vue.runtime.esm.js?a427:180
click @ LinkItem.vue?219f:18
invoker @ vue.runtime.esm.js?a427:1817

Запрос:

export const ALL_LINKS_QUERY = gql`
query AllLinksQuery($first: Int, $skip: Int, $orderBy: LinkOrderBy) {
  allLinks(first: $first, skip: $skip, orderBy: $orderBy) {
    id
    createdAt
    url
    description
    postedBy {
      id
      name
    }
    votes {
      id
      user {
        id
      }
    }
  }
  _allLinksMeta {
    count
  }
}
`

Код:

      voteForLink () {
        const userId = localStorage.getItem(GC_USER_ID)
        const voterIds = this.link.votes.map(vote => vote.user.id)
        if (voterIds.includes(userId)) {
          alert(`User (${userId}) already voted for this link.`)
          return
        }
        const linkId = this.link.id
        this.$apollo.mutate({
          mutation: CREATE_VOTE_MUTATION,
          variables: {
            userId,
            linkId
          },
          update: (store, { data: { createVote } }) => {
            this.updateStoreAfterVote(store, createVote, linkId)
          }
        })
      },
      updateStoreAfterVote (store, createVote, linkId) {
        // 1
        const data = store.readQuery({
          query: ALL_LINKS_QUERY
        })

        // 2
        const votedLink = data.allLinks.find(link => link.id === linkId)
        votedLink.votes = createVote.link.votes

        // 3
        store.writeQuery({ query: ALL_LINKS_QUERY, data })
      }

1 ответ

Итак, проблема была решена путем связывания переменных с вызовом ALL_LINKS_QUERY:

        const data = store.readQuery({
          query: ALL_LINKS_QUERY,
          variables: {
            first: 5,
            skip: 0,
            orderBy: 'createdAt_DESC'
          }
        })

Другие вопросы по тегам