(已编辑)使用生成的查询类型重新获取似乎与 Apollo 客户端中的重新获取功能不同useQuery
。我不明白如何表达它 - 任何人都可以提供一个例子吗?
我意识到问题可能是我的 refetch 措辞不正确,或者商店只是命中了缓存的查询。几天来我一直在检查我的代码,但我无法弄清楚它可能是什么。我也尝试过等待块。
refetch 与 svelte-apollo 一起工作,但我正试图消除这种依赖。我也尝试过 Apollo Client's useQuery
,但是带有 typescript-svelte-apollo 的 graphql-codegen 的全部意义在于使用生成的 typescript 包装器进行查询。
当我将生成的查询分配给我的 Svelte 前端代码中的反应常数时,
$: observations = getObservations({ variables: { filter } });
正如我所料,当我更新查询变量时,查询不会重新获取。
这就是我的苗条模板使用查询的方式。过滤器对象根据表单用户输入进行更改。await
我也用块试过这个。
<script lang="ts">
import { getObservations } from '$lib/generated';
$: observations = getObservations({ variables: { filter } });
function handleFilter(event) {
filter = event.detail;
}
</script>
{#if $observations.loading}
Loading...
{:else if $observations.error}
{$observations.error}
{:else if $observations.data}
{#each $observations.data['observations']['edges'] as edge}
<Item node={edge['node']} />
{/each}
{/if}
由于这个插件允许直接使用查询,没有 Apollo's useQuery
,我不知道如何措辞重新获取。如果我在$observations.refetch();
里面做handleFilter(e)
,我会得到一个错误
Property 'refetch' does not exist on type 'Readable<ApolloQueryResult<GetObservationsQuery> & { query: ObservableQuery<GetObservationsQuery, Exact<{ filter?: FilterObservationsInput; }>>; }>'.ts(2339)
我的配置没有什么花哨的。我在这里做错了吗?
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
这是客户端:
export default new ApolloClient({
link: authLink.concat(httpLink),
cache: new InMemoryCache({
typePolicies: {
Query: {
fields: {
observations: relayStylePagination(),
},
},
},
})
});
生成的查询:
export const getObservations = (
options: Omit<
WatchQueryOptions<GetObservationsQueryVariables>,
"query"
>
): Readable<
ApolloQueryResult<GetObservationsQuery> & {
query: ObservableQuery<
GetObservationsQuery,
GetObservationsQueryVariables
>;
}
> => {
const q = client.watchQuery({
query: GetObservationsDoc,
...options,
});
var result = readable<
ApolloQueryResult<GetObservationsQuery> & {
query: ObservableQuery<
GetObservationsQuery,
GetObservationsQueryVariables
>;
}
>(
{ data: {} as any, loading: true, error: undefined, networkStatus: 1, query: q },
(set) => {
q.subscribe((v: any) => {
set({ ...v, query: q });
});
}
);
return result;
}
这是构建它的查询文档:
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
}
}
}
}
}