4

我有一些Apollo-Hooks代码用于useSubscription监听订阅中的事件变化:

useSubscription<MySubscriptionUpdated>(MySubscription, {
    onSubscriptionData: async ({ client, subscriptionData: { data } }) => {
      if (!data) {
        return;
      }
      ...

此代码会自动更新响应的缓存,这在大多数情况下都很棒

但是,我需要在收到响应之后,在更新缓存之前进行一些结果处理。

有谁知道使用useSubscription钩子的方法,而不是自动更新缓存?

响应最终将始终包含一个实体__typename

4

2 回答 2

3

您可以fetchPolicy针对每个订阅进行更改。默认值为cache-first。要禁用缓存,必须将 fetchPolicy 设置为no-cache. 更多详细信息请参见apollo 官方文档

useSubscription<MySubscriptionUpdated>(MySubscription, {
    fetchPolicy: "no-cache",
    onSubscriptionData: async ({ client, subscriptionData: { data } }) => {
      if (!data) {
        return;
      }
      ...
于 2019-11-12T07:05:10.173 回答
0

所以,你可以手动更新缓存,看起来像这样

apollo.mutate({
  mutation: createTaskMutation,
  variables: item,
  update: (cache, { data }) => {
    try {
      let { allTasks } = cache.readQuery({ query: getTasks });
      allTasks.push(data);
      cache.writeQuery({ //
        query: getTasks,
        data: {
            'allTasks': allTasks
        }
      });
    } catch (e) {
        // We should always catch here,
        // as the cache may be empty or the query may fail
    }
});
于 2019-11-12T12:09:10.617 回答