首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >vue-apollo突变触发意外订阅

vue-apollo突变触发意外订阅
EN

Stack Overflow用户
提问于 2018-12-13 15:15:42
回答 1查看 160关注 0票数 0

我的entry组件中有一个智能查询。它将在页面加载时显示项目。

代码语言:javascript
复制
apollo: {
    feed: {
      query: FEED_QUERY,
      result({ data, loading, networkStatus }) {
        console.log("Feed success!");
        this.feedItems(data.feed); // sync vuex state
      },
      error(error) {
        console.error("Feed error!", error);
      },
      watchLoading(isLoading, countModifier) {

      }
    }
}

我在created钩子中添加了一个标准订阅,它将在观察到更改时刷新项目。

代码语言:javascript
复制
  created: function() {
    const _this = this;
    const observer = this.$apollo.subscribe({
      query: ITEM_SUBSCRIPTION
    });
    observer.subscribe({
      next(data) {
        _this.$apollo.queries.feed.refetch();
      },
      error(error) {
        console.error(error);
      }
    });
  },

当我做任何这样的变异时,

代码语言:javascript
复制
this.$apollo
    .mutate({
      mutation: ITEM_DELETE_MUTATION,
      variables: {
        id
      }
    })
    .then(({ data }) => {
      console.log("Delete item success!");
    })
    .catch(error => {
      console.error("Delete item fail!");
    });

我希望控制台注销:

代码语言:javascript
复制
Delete item success!
Observe changes!
Feed success!

但实际上它是打印的

代码语言:javascript
复制
Feed success!    <-------- unexpected
Delete item success!
Observe changes!
Feed success!

我不知道第一条Feed success!消息是如何触发的。有什么想法吗?提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2018-12-13 17:46:56

嗯,你的result回调是在加载查询时调用的。

这在您设计乐观UI时非常方便,在这种UI中,您向用户呈现来自服务器的假响应,并在获得实际响应后对其进行更新。

如果你想阻止它,只需这样做:

代码语言:javascript
复制
result({data, loading, networkStatus}) {
  if (loading) return
  console.log('Feed success!')
  this.feedItems(data.feed) // sync vuex state
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53756772

复制
相关文章

相似问题

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