Apollo客户端:在项目细节查询不同的情况下进行乐观更新以添加列表项会导致缓存丢失
创始人
2024-09-09 12:01:38
0

在进行乐观更新时,可以手动更新Apollo客户端缓存,以保持查询的一致性。例如,假设我们的组件需要向服务器添加一个新的列表项,并通过细节查询更新列表项的详细信息。我们可以使用类似于以下代码的操作来进行乐观更新并更新缓存:

const [addItem, { loading }] = useMutation(ADD_ITEM_MUTATION, {
  update: (cache, { data }) => {
    const { id, name } = data.addItem;
    const newList = { id, name };
    // 更新缓存
    const existingList = cache.readQuery({ query: LIST_QUERY });
    cache.writeQuery({
      query: LIST_QUERY,
      data: {
        list: [newList, ...existingList.list],
      },
    });
    // 更新细节查询的缓存
    const existingDetail = cache.readQuery({
      query: ITEM_DETAIL_QUERY,
      variables: { id: item.id },
    });
    cache.writeQuery({
      query: ITEM_DETAIL_QUERY,
      variables: { id: item.id },
      data: {
        item: {
          ...existingDetail.item,
          list: [newList, ...existingDetail.item.list],
        },
      },
    });
  },
  optimisticResponse: {
    __typename: 'Mutation',
    addItem: {
      __typename: 'Item',
      id: -1,
      name: '',
      list: [],
    },
  },
});

在上面的代码中,我们在update回调中手动更新了列表查询和项目细节查询的缓存。我们还提供了一个乐观响应,以确保提供与服务器返回数据相同的UI反应。

请注意,在进行乐观更新时,一定要小心处理缓存,以确保应用程序状态的一致性。

相关内容

热门资讯

前端-session、jwt 目录:   (1)session (2&#x...
linux入门---制作进度条 了解缓冲区 我们首先来看看下面的操作: 我们首先创建了一个文件并在这个文件里面添加了...
关于测试,我发现了哪些新大陆 关于测试 平常也只是听说过一些关于测试的术语,但并没有使用过测试工具。偶然看到编程老师...
前缀和与对数器与二分法 1. 前缀和 假设有一个数组,我们想大量频繁的去访问L到R这个区间的和,...
nodejs:本地安装nvm实... 一、背景-使用不同版本node的原因 vue3+ts、nuxt3版本,node...
JAVA集合知识整理 Java集合知识整理 HashMap相关 HashMap的底层数据结构:jdk1.8之...
无刷直流电机介绍及单片机控制实... 无刷直流电机介绍及单片机控制实例前言基本概念优势与劣势使用寿命基本结构使用单片机控制实例电子调速器&...
fwdiary(2) dp2 1.传纸条  AcWing 275. 传纸条 - AcWing 走两条路,走一条最大的...
常用的DOS命令 常用的DOS命令 DOS(Disk Operating System,磁...
<C++> 类和对象(下) 1.const成员函数将const修饰的“成员函数”称之为const成员函数,cons...