Apollo React subscribeToMore 不更新数据

Posted

技术标签:

【中文标题】Apollo React subscribeToMore 不更新数据【英文标题】:Apollo React subscribeToMore doesn't update data 【发布时间】:2019-12-29 14:41:29 【问题描述】:

我遇到了一个问题,即特定 subscribeToMore 函数未正确更新查询数据。 subscribeToMore 函数正确接收新的订阅数据,但它不更新查询。

updateQuery: (prev,  subscriptionData ) => 
     if (!subscriptionData.data) return prev;
     let tabFields = [subscriptionData.data.fieldCreated, ...prev.tabFields];
     return Object.assign(, prev, 
        tabFields
     );

如果我 console.log prev 和 Object.assign 函数,我得到:

tabFields: Array(x) 和 tabFields: Array(x+1) 分别。这向我表明返回数据的格式是正确的。然而组件并没有重新渲染,这样......

subscribeToNew(subscribeToMore);
console.log(data.tabFields);
return renderFields(data.tabFields); 

...订阅发生时不会重新呈现或记录。

在这一点上我完全被难住了。我还有其他几个使用相同格式的订阅。他们工作得很好。返回响应与先前数据的格式匹配。

【问题讨论】:

你能显示 ApolloClient 选项吗 成功了。谢谢你。仍然对为什么它适用于其他订阅而不是这个订阅感到困惑。 如果你的意思是这个trick:dataIdFromObject: o => o.id,你需要在添加新订阅的mutation返回中添加id。 @NathanL 你是怎么解决这个问题的? 那么,@NathanL 你是如何解决这个问题的?我有完全相同的问题 - 除了一个视图之外,该解决方案在任何地方都适用...... 【参考方案1】:

你在使用分页吗?

我遇到了类似的问题,我正在从聊天中获取最后 20 条消息,然后尝试通过 websockets 进行更新。问题是我正在制作一个 20 项数组 => 21 项数组。

当我删除第一条消息并添加到数组的末尾(所以我保留了原始长度)时,它开始起作用了!

【讨论】:

以上是关于Apollo React subscribeToMore 不更新数据的主要内容,如果未能解决你的问题,请参考以下文章

Apollo:在订阅更新时更新 React 道具?

找不到模块:无法解析“apollo-link-context”-REACT,APOLLO-SERVER

使用 `react-apollo-hooks` 和 `useSubscription` 钩子

将 React 16 应用程序升级到 Apollo 2 问题

React/Apollo - 不同组件中的类似查询?

设置 AWSAppSyncClient、Apollo 和 React 的正确方法