ApolloClient可以更新缓存中已删除的关联吗?

时间:2019-12-13 02:55:04

标签: javascript react-apollo apollo-client

我有一个类似这样的用户界面:

http://example.com/term/5

Term: selective serotonin reuptake inhibitor
Canonical: --
Aliases:
- SSRI [remove]

http://example.com/term/10

Term: SSRI
Canonical: selective serotonin reuptake inhibitor [remove]
Aliases:
--

比方说,我查看了/term/5并将其放入缓存。然后,我转到/term/10并单击[remove]按钮以删除规范。突变会返回不再具有Canonical的术语10,因此UI会正确更新。是的!

接下来,我导航至/term/5。糟糕,用户界面过时。仍然认为“ SSRI”是一个别名。

我可以使用针对突变的更新功能来处理此问题,从而使它在缓存中无效。像这样:

update(cache, {data}) {
  const keyToDelete = Object.keys(cache.data.data).find(key => {
    const {id, __typename} = cache.data.data[key];
    return __typename === 'Term' && id === data.term.canonical.id;
  });
  if (keyToDelete) {
    cache.data.delete(keyToDelete);
  }
}

好像是PITA,但是还可以。

但是,现在让我们说相反的事情:从规范中删除别名。突变返回的是现在没有别名的Term 5,因此将更新Term 5的UI,但是当我转到Term 10时,它仍然具有规范。

在这种情况下,我看不到如何使用update。我没有访问更新功能中已删除别名的ID,所以找不到要删除的键。

我想这一定是常见的情况。我该如何处理?

0 个答案:

没有答案