graphql-codegen машинопись-стройный-аполлон — Рефетч не работает?

#apollo-client #svelte #graphql-codegen

#аполлон-клиент #стройная #graphql-кодовый код

Вопрос:

(Отредактировано) Повторная выборка с помощью сгенерированного типа запроса, по-видимому, работает иначе, чем функция повторной выборки в клиенте Apollo useQuery . Я не понимаю, как это сформулировать — может ли кто-нибудь привести пример?

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

Рефетч работал со стройным аполлоном, но я пытаюсь устранить эту зависимость. Я также пробовал клиент Apollo useQuery , но весь смысл graphql-codegen с typescript-svelte-apollo заключается в использовании сгенерированной оболочки typescript для запроса.

Когда я назначаю сгенерированный запрос реактивной константе в моем изящном интерфейсном коде,

 $: observations = getObservations({ variables: { filter } });  

запрос не повторяется при обновлении переменных запроса, как я ожидал бы.

Вот как мой стройный шаблон использует запрос. Объект фильтра изменяется в зависимости от ввода пользователем формы. Я тоже пробовал это с await блоком.

 lt;script lang="ts"gt; import { getObservations } from '$lib/generated';  $: observations = getObservations({ variables: { filter } });  function handleFilter(event) {  filter = event.detail; } lt;/scriptgt;  {#if $observations.loading}  Loading... {:else if $observations.error}  {$observations.error} {:else if $observations.data}  {#each $observations.data['observations']['edges'] as edge}  lt;Item node={edge['node']} /gt;  {/each} {/if}  

Поскольку этот плагин позволяет использовать запрос напрямую, без Apollo useQuery , я не уверен, как сформулировать повторную выборку. Если я это сделаю $observations.refetch(); внутри handleFilter(e) , я получу сообщение об ошибке

 Property 'refetch' does not exist on type 'Readablelt;ApolloQueryResultlt;GetObservationsQuerygt; amp; { query: ObservableQuerylt;GetObservationsQuery, Exactlt;{ filter?: FilterObservationsInput; }gt;gt;; }gt;'.ts(2339)  

There’s nothing fancy in my config. Am I doing something wrong here?

 schema: src/graphql/schema.graphql documents:   - src/graphql/queries.graphql  - src/graphql/mutations.graphql generates:  src/lib/generated.ts:  plugins:  - typescript  - typescript-operations  - graphql-codegen-svelte-apollo config:   clientPath: src/lib/shared/client  # asyncQuery: true  scalars:  ISO8601Date: Date  ISO8601DateTime: Date  

Here’s the client:

 export default new ApolloClient({  link: authLink.concat(httpLink),  cache: new InMemoryCache({  typePolicies: {  Query: {  fields: {  observations: relayStylePagination(),  },  },  },  }) });  

The generated query:

 export const getObservations = (  options: Omitlt;  WatchQueryOptionslt;GetObservationsQueryVariablesgt;,   "query"  gt;  ): Readablelt;  ApolloQueryResultlt;GetObservationsQuerygt; amp; {  query: ObservableQuerylt;  GetObservationsQuery,  GetObservationsQueryVariables  gt;;  }  gt; =gt; {  const q = client.watchQuery({  query: GetObservationsDoc,  ...options,  });  var result = readablelt;  ApolloQueryResultlt;GetObservationsQuerygt; amp; {  query: ObservableQuerylt;  GetObservationsQuery,  GetObservationsQueryVariables  gt;;  }  gt;(  { data: {} as any, loading: true, error: undefined, networkStatus: 1, query: q },  (set) =gt; {  q.subscribe((v: any) =gt; {  set({ ...v, query: q });  });  }  );  return result;  }  

Here’s the query document that it’s built from:

 query getObservations($filter: FilterObservationsInput) {  observations(filter: $filter) {  pageInfo {  startCursor  endCursor  hasNextPage  hasPreviousPage  }  edges {  cursor  node {  id  createdAt  updatedAt  when  where  imgSrcThumb  imgSrcSm  imgSrcMed  thumbImage {  width  height  }  name {  formatName  author  }  user {  name  login  }  rssLog {  detail  }  }  }  } }