首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在react-apollo中发生删除突变后更新UI

如何在react-apollo中发生删除突变后更新UI
EN

Stack Overflow用户
提问于 2019-05-03 20:46:39
回答 2查看 1.7K关注 0票数 1

我希望我的应用程序的UI在react apollo组件中运行删除变异后进行更新。删除操作成功,但UI在删除突变后未更新。下面是我的代码副本,有什么地方我没弄对吗?

代码语言:javascript
复制
const deleteRoom = async (roomId, client = apolloClient) => {
  const user = await getUserDetails();
  const deleteResponse = await client.mutate({
    mutation: DELETE_ROOM,
    name: 'deleteRoom',
    variables: {
      roomId,
    },
    update: (cache, { data: roomDelete }) => {
      const data = cache.readQuery({
        query: GET_ROOMS_QUERY,
        variables: {
          location: user.location,
          office: '',
          page: 1,
          perPage: 8,
        },
      });
      data.allRooms.rooms = data.allRooms.rooms.filter(
        room => room.id !== roomDelete.deleteRoom.room.id,
      );
      console.log(data, '======');
      cache.writeQuery({
        query: GET_ROOMS_QUERY,
        data,
      });
    },
  });
  return deleteResponse;
};

我期望UI会在执行delete变异后更新,然而,除非我执行强制刷新,否则UI不会更新。

N:B当我通过控制台记录数据时,它实际上是在将删除的数据从数组中筛选出来之后将其删除。更新后的数据就是我写回缓存的数据

EN

回答 2

Stack Overflow用户

发布于 2019-05-03 22:05:22

文档中对此行为进行了描述:

cache.writeQueryclient.writeQuery之间的区别在于,客户端版本还会在写入缓存后执行广播。此广播确保在client.writeQuery操作后在视图层中刷新数据。如果仅使用cache.writeQuery,则更改可能不会立即反映在视图层中。如果您希望在不立即更新视图层的情况下执行多个缓存写入,则此行为有时很有用。

您可以使用mutate中的refetchQueries选项强制刷新。

票数 1
EN

Stack Overflow用户

发布于 2020-12-18 17:38:28

确保要作为"data“进行更新的对象包含返回值,并且不是空对象,因此不会更新UI。

update: (cache, { data: roomDelete }) //日志数据

因此,变化可以工作,但UI不会立即更改,而更新不会向前传递数据。

而且cache.writeQuery运行得很好。

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

https://stackoverflow.com/questions/55970128

复制
相关文章

相似问题

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