【发布时间】:2020-12-20 16:40:39
【问题描述】:
我正在用头撞墙。我已更新到 Apollo 3,但无法弄清楚如何将 updateQuery 迁移到 typePolicy。我正在做基本的基于延续的分页,这就是我用来合并fetchMore的结果的方式:
await fetchMore({
query: MessagesByThreadIDQuery,
variables: {
threadId: threadId,
limit: Configuration.MessagePageSize,
continuation: token
},
updateQuery: (prev, curr) => {
// Extract our updated message page.
const last = prev.messagesByThreadId.messages ?? []
const next = curr.fetchMoreResult?.messagesByThreadId.messages ?? []
return {
messagesByThreadId: {
__typename: 'MessagesContinuation',
messages: [...last, ...next],
continuation: curr.fetchMoreResult?.messagesByThreadId.continuation
}
}
}
我曾尝试自己编写mergetypePolicy,但它只是不断加载并抛出有关 Apollo 缓存中重复标识符的错误。这是我的typePolicy 查询时的样子。
typePolicies: {
Query: {
fields: {
messagesByThreadId: {
keyArgs: false,
merge: (existing, incoming, args): IMessagesContinuation => {
const typedExisting: IMessagesContinuation | undefined = existing
const typedIncoming: IMessagesContinuation | undefined = incoming
const existingMessages = (typedExisting?.messages ?? [])
const incomingMessages = (typedIncoming?.messages ?? [])
const result = existing ? {
__typename: 'MessageContinuation',
messages: [...existingMessages, ...incomingMessages],
continuation: typedIncoming?.continuation
} : incoming
return result
}
}
}
}
}
【问题讨论】:
标签: javascript typescript graphql apollo typepolicies