【发布时间】:2020-02-03 18:34:51
【问题描述】:
在特定的 Query subscribeToMore 函数上,我似乎无法让 Query 获取新数据。
updateQuery: async (prev, { subscriptionData } ) => {
const posts = [
...prev.getPosts,
subscriptionData.data.postCreated
];
const result = {
...prev,
count: posts.length,
getPosts: posts
}
return result;
}
这会导致以下错误:
{} 中缺少字段 getPosts
如果我记录我得到的结果:
对象 { getPosts: (3) […], count: 3 }
我不确定是什么原因造成的,因为在其他几个 updateQuery 调用中似乎还不错。尤其是这一个似乎打破了。
有问题的查询:
export const POST_CREATED = gql`
subscription postCreated($authorId: ID!){
postCreated(authorId: $authorId){
id, title, createdAt, published
}
} `;
export const GET_POSTS = gql`
query getPosts($authorId: ID!){
getPosts(authorId: $authorId){
id, title, createdAt, published
}
} `;
【问题讨论】:
-
这看起来有点奇怪——我不希望
count位于根级别。有问题的实际查询是什么? -
只是一个 getPosts 查询,这样它就会返回 [Post!]。我已确保发布回复包含相同的信息。
-
您能幽默一下并编辑问题以包含实际查询吗?我怀疑您返回的对象与您的实际查询不匹配,但如果没有看到查询,我无法确认
-
完成。有趣的是,即使我只是简单地编辑 updateQuery 以立即返回 prev(这样数据相同),它仍然会导致相同的错误。
-
是的,确实很奇怪。我相信当您尝试写入缓存查询但field you're writing isn't in the cache 时会引发错误。是否有任何突变也在更新缓存中的同一查询?我想知道代码中其他地方的
writeQuery是否会弄乱缓存。
标签: reactjs graphql apollo react-apollo