【问题标题】:Apollo React subscribeToMore doesn't update dataApollo React subscribeToMore 不更新数据
【发布时间】: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 你是如何解决这个问题的?我有完全相同的问题 - 除了一个视图之外,该解决方案在任何地方都适用......

标签: reactjs graphql apollo react-apollo


【解决方案1】:

你在使用分页吗?

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

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

【讨论】:

    猜你喜欢
    • 2018-07-15
    • 2017-07-18
    • 2019-12-05
    • 2022-08-17
    • 2021-11-13
    • 2022-09-29
    • 2019-12-05
    • 2017-02-23
    • 2018-01-18
    相关资源
    最近更新 更多