【问题标题】:Subscription Refetch Updating Data订阅重新获取更新数据
【发布时间】:2022-01-21 23:01:56
【问题描述】:

我想听听你对某件事的看法。

我正在尝试了解订阅的工作原理。但是,我找不到在订阅中提取对象数组的方法。例如,如果我使用 createMany,我无法通过订阅返回所有结果。

第二个问题是如果我返回单个项目,例如如果它是一个新项目,我必须“手动(空中报价)”将该项目添加到已显示的列表中。但这让我觉得我实际上并没有显示实时真实数据。

所以我的问题是使用类似的东西

 useEffect(() => {
    // refetching original query when subscription is triggered
    refetch();
 }, [updatedNotificationData]);

会不会有比我应该更多地访问服务器的缺点?假设每次发生重新获取时,我可能会提取数千条通知(我知道有缓存但仍然存在),或者是否有更好的方法来处理带来新数据。

另外,我尝试将订阅的数据添加到原始列表中,但由于某种原因,react 每次都会添加 2 个相同的项目。

如果您能给我正确的方向,请提前感谢。

【问题讨论】:

    标签: reactjs graphql apollo-client subscription prisma


    【解决方案1】:

    如果我使用 createMany,我无法通过订阅返回所有结果。

    如果将订阅的返回类型定义为数组,这应该不是问题。

    type Subscription{
      onChange:[ObjectType]
    }
    

    这可以让您避免再次获取,但更新缓存可能会有点复杂。

    另外,我尝试将订阅的数据添加到原始列表中,但由于某种原因,react 每次都会添加 2 个相同的项目。

    如果您使用的是 subscribeToMore 方法,它不会真正对错误做出反应,而是 updateQuery 方法的工作方式:github issue regarding this

    我的解决方法是通过 useSubscription 钩子订阅并处理 onSubscriptionData 回调 apollo documentation 中的缓存修改,并在我获取数据后设置 useQuery 钩子跳过选项,这样它就不会在每次重新渲染时查询。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-09
      • 1970-01-01
      • 2021-10-24
      • 1970-01-01
      • 1970-01-01
      • 2017-11-04
      • 2017-11-11
      • 2017-08-20
      相关资源
      最近更新 更多