apollo-link-state:如何编写查询解析器?
apollo-link-state: How to write Query resolvers?
我使用默认值创建状态 link,如下所示:
const stateLink = withClientState({
cache,
resolvers,
defaults: {
quote: {
__typename: 'Quote',
name: '',
phoneNumber: '',
email: '',
items: []
}
}
})
所以我的缓存不应该是空的。现在我的 resolvers
地图看起来像这样:
resolvers = {
Mutation: { ... },
Query: {
quote: (parent, args, { cache }) => {
const query = gql`query getQuote {
quote @client {
name phoneNumber email items
}
}`
const { quote } = cache.readQuery({ query, variables: {} })
return ({ ...quote })
}
}
}
我的resolvers
的datasource
是缓存吧?所以我必须以某种方式查询缓存。但这不起作用,我想这是因为我正在尝试响应 quote
查询,为此我正在进行另一个 quote
查询。
我想我应该在不查询 quote
的情况下获取 quote
数据,但是如何呢?
我收到这个错误:
Can't find field **quote** on object (ROOT_QUERY) undefined
请帮忙
只是想 post 同样的问题 - 幸运的是刚刚弄明白了。
readQuery-Methode 只允许您从根目录进行查询。所以你应该使用 readFragment,因为它允许你访问缓存中的任何规范化字段,只要你得到它的 id(像这样的东西:GraphQlTypeName:0 通常由字段构造:id 和 __typename ) .你的查询解析器应该看起来像这样:
protected resolvers = {
Query: {
getProdConfig: (parent, args, { cache, getCacheKey }) => {
const id = getCacheKey({ __typename: 'ProdConfig', id: args.id });
const fragment = gql`fragment prodConfig on ProdConfig {
id,
apiKey,
backupUrl,
serverUrl,
cache,
valid
}`;
const data = cache.readFragment({ fragment, id })
return ({ ...data });
}
}
来自 apollo 的电话是这样的:
let query = this.$apollo.query(`
query prodConfig($id: Int!) {
getProdConfig(id: $id) @client {
apiKey,
backupUrl,
serverUrl,
cache,
valid
}
}`,
{ id: 0 }
);
我使用默认值创建状态 link,如下所示:
const stateLink = withClientState({
cache,
resolvers,
defaults: {
quote: {
__typename: 'Quote',
name: '',
phoneNumber: '',
email: '',
items: []
}
}
})
所以我的缓存不应该是空的。现在我的 resolvers
地图看起来像这样:
resolvers = {
Mutation: { ... },
Query: {
quote: (parent, args, { cache }) => {
const query = gql`query getQuote {
quote @client {
name phoneNumber email items
}
}`
const { quote } = cache.readQuery({ query, variables: {} })
return ({ ...quote })
}
}
}
我的resolvers
的datasource
是缓存吧?所以我必须以某种方式查询缓存。但这不起作用,我想这是因为我正在尝试响应 quote
查询,为此我正在进行另一个 quote
查询。
我想我应该在不查询 quote
的情况下获取 quote
数据,但是如何呢?
我收到这个错误:
Can't find field **quote** on object (ROOT_QUERY) undefined
请帮忙
只是想 post 同样的问题 - 幸运的是刚刚弄明白了。 readQuery-Methode 只允许您从根目录进行查询。所以你应该使用 readFragment,因为它允许你访问缓存中的任何规范化字段,只要你得到它的 id(像这样的东西:GraphQlTypeName:0 通常由字段构造:id 和 __typename ) .你的查询解析器应该看起来像这样:
protected resolvers = {
Query: {
getProdConfig: (parent, args, { cache, getCacheKey }) => {
const id = getCacheKey({ __typename: 'ProdConfig', id: args.id });
const fragment = gql`fragment prodConfig on ProdConfig {
id,
apiKey,
backupUrl,
serverUrl,
cache,
valid
}`;
const data = cache.readFragment({ fragment, id })
return ({ ...data });
}
}
来自 apollo 的电话是这样的:
let query = this.$apollo.query(`
query prodConfig($id: Int!) {
getProdConfig(id: $id) @client {
apiKey,
backupUrl,
serverUrl,
cache,
valid
}
}`,
{ id: 0 }
);