React Apollo-subscriptionToMore / updateQuery错误地传播更新

时间:2019-09-15 22:20:01

标签: reactjs graphql react-apollo apollo-client graphql-subscriptions

使用GraphQL的奇怪情况。假设有一个名为postIsRead的订阅,它表示当前正在阅读的帖子列表中的帖子,例如:

帖子:{   编号:1   读取:true }

一次只能阅读一篇文章。当用户单击某个帖子时,它将将该帖子标记为已读,并将所有其他帖子标记为未读。然后,它调度一个订阅更新,以相应地更新用户数据。

这是通过subscriptionToMore进行的订阅上的updateQuery。

       updateQuery: (prev, { subscriptionData }) => {
            if (!subscriptionData.data) return prev;
            let posts = [...prev.posts];
            posts.forEach((f)=> {
                f.id === subscriptionData.data.postIsRead.id
                    ? f.read = subscriptionData.data.getPosts.read
                    : f.read = false
            });
            return Object.assign({}, prev, {
                getPosts: posts
            });
        }

现在有两个问题:帖子的状态不会立即传播,例如在渲染帖子时,在多个帖子上读取=== true。它似乎滞后了,好像是在延迟加载之类的。我不确定这是React问题还是Apollo问题。

在对此进行故障排除时,它甚至变得更奇怪。我注释掉了updateQuery函数中的所有代码,例如:

       updateQuery: (prev, { subscriptionData }) => {}

...将订阅值更新为:true。我似乎误解了它是如何工作的,因为即使函数未返回任何内容,它也在传播更改。但是,如果我完全删除updateQuery,则不会发生更改。

特别是(为了悬赏),我试图了解每当订阅更新时传播更改的最佳方法。

0 个答案:

没有答案