Apollo Client 3:如何将突变结果缓存到嵌套集合中?(集合中的集合)



在我的Apollo Client 3应用程序中,我正在做一个突变,并希望将结果缓存到一个集合中,该集合嵌套在集合的一个项目中。

具体来说,我在一个评论列表中创建一个comment,每个列表在一个帖子中,每个帖子在一个帖子列表中。我的应用程序的数据层次结构看起来像:

user 1
profile 1
post 1
comment 1.1
comment 1.2
post 2
comment 2.1
comment 2.2
< write mutation result here >
post 3
comment 3.1
comment 3.2
comment 3.3
...

在这种情况下,我如何最好地将创建的评论缓存到其父帖子的评论集合中?我正在看useMutation钩子的updatemodify配置,但我不太确定。

对于其他上下文,下面是与上述数据层次结构对应的查询:

query getUserPosts($userParams: GetUserParams!$postsPaginationParams: CursorPaginationParams!) {
user(params: $userParams) {
id
profile {
id
# ...
ownedPosts(pagination: $postsPaginationParams) {
items {
id
# ...
featuredComments {
id
primaryText
creationTimestamp
owner {
id
name
}
}
}
pagination {
# ...
}
}
}
}
}

这是我的突变:

input CreateCommentParams {
ownerId: String!
postId: String!
primaryText: String!
}
mutation createComment($params: CreateCommentParams!) {
createComment(params: $params) {
id
owner {
id
name
}
primaryText
creationTimestamp
}
}

以下是useMutation到目前为止的情况:

useMutation(CREATE_COMMENT_MUTATION, {
// ...
update: (cache, { data }) => {
if (data) {
const cacheId = cache.identify(data.createComment);
cache.modify({
fields: {
// ...how to update the comments array of the specific post? 
}
})
}
},
})

您需要找到您正在更新的Post并更新其featuredComments字段,如下所示:

useMutation(CREATE_COMMENT_MUTATION, {
// ...
update: (cache, { data }) => {
cache.modify({
id: cache.identify({
__typename: 'Post', // Assuming your this is the _typename of your Post type in your schema
id: postId,
}),
fields: {
featuredComments: (previous, { toReference }) => [...previous, toReference(data.createComment)]
},
}),
}),
})

相关内容

  • 没有找到相关文章

最新更新