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

Nat*_*anL 5 reactjs graphql react-apollo graphql-subscriptions apollo-client

我有一个订阅,比方说postIsRead,它表示当前正在阅读的帖子列表中的帖子,例如:

帖子:{id:1,阅读:true}

...管他呢。一次只能阅读一篇文章。无论如何,这是通过subscribeToMore在订阅上的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
            });
        }
Run Code Online (Sandbox Code Playgroud)

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

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

       updateQuery: (prev, { subscriptionData }) => {}
Run Code Online (Sandbox Code Playgroud)

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

具体来说(为了赏金),我试图了解在订阅更新时提出更改的最佳方法。