首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Apollo-client:向缓存中的数组添加项目

Apollo-client:向缓存中的数组添加项目
EN

Stack Overflow用户
提问于 2020-11-27 00:45:21
回答 2查看 510关注 0票数 0

假设我有以下GraphQL类型:

代码语言:javascript
复制
type User {
  id: String!
  posts: [Post!]!
}

type Post {
  id: String!
  text: String,
}

下面是返回更新后的帖子的一个变异:

代码语言:javascript
复制
mutation addNewPost(
  $userId: String!
  $text: String!
) {
  addNewPost(userId: $userId, text: $text) {
    id
    text
  }
}

在运行这个突变之后,我的缓存中包含了一个新的post条目。如何将其添加到用户的帖子数组中?我试过cache.writeQuerycache.modify,但我搞不懂。

EN

回答 2

Stack Overflow用户

发布于 2021-11-15 11:06:36

我们确实在update函数中将项推入数组,这是useMutation的选项之一。我正在编写整个变异,这样你就可以理解了,让我们来看一下例子:

By Update函数:

代码语言:javascript
复制
const [createPost, { data, loading, error }] = useMutation(CREATE_POST, {
  update(cache, response) {

  // Here we write the update

  // Step 1: Read/Fetch the data   
  const data = client.readQuery({
    query: FETCH_POSTS_QUERY,
  });

  // Step 2: Update the cache by immutable way   
  client.writeQuery({
    query: FETCH_POSTS_QUERY,
    data: {
      getPosts: [response.data.createPost, ...data.getPosts],
    },
  });
 },
    variables: formValues,
  });

refetchQueries提供的

通过使用用gql函数解析的DocumentNode对象,这确实是更新缓存的捷径

代码语言:javascript
复制
const [createPost, { data, loading, error }] = useMutation(CREATE_POST, {
   
    refetchQueries: [                         
               FETCH_POSTS_QUERY
              'fetchPosts`' // OR  Query name
   ],   
     
    variables: formValues,
  });
票数 1
EN

Stack Overflow用户

发布于 2020-11-28 06:12:57

您可能希望直接写入Apollo缓存,以便更新您的突变修改过的其他实体。

请看这里的文档和细节(您将使用cache.modifycache.writeFragment)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65026151

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档