使用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,则不会发生更改。
特别是(为了悬赏),我试图了解每当订阅更新时传播更改的最佳方法。