如何防止使用useSubscription()进行重新渲染?

时间:2020-05-18 18:54:26

标签: react-hooks apollo react-apollo graphql-subscriptions

许多人可能听说过GraphQL。它提供QUERYMUTATION。它还支持SUBSCRIPTION作为web socket的100%替代。我是GraphQL和hooks的忠实拥护者。今天,我遇到了useSubscription的问题,它是SUBSCRIPTION的钩子版本。当这个订阅被触发时,React组件被重新渲染。我不确定为什么会导致重新渲染。

import React from 'react'
import { useSubscription } from 'react-apollo'

const Dashboard = () => {
  ...
  useSubscription(query, {
    onSubscriptionData: data => {
      ...
    }
  })

  render (
    <>
      Dashboard
    </>
  )
}

实际上,useSubscription的API文档现在对此没有任何说明。如果您为我提供了防止重新渲染的好方法,将不胜感激。

谢谢!

1 个答案:

答案 0 :(得分:0)

以我的经验,在onSubscriptionData中接收新数据时,无法阻止重新渲染。如果将全局数据用于计算,则应将useMemo用于全局变量。另一方面,您应该考虑是否需要将变量放入onSubscriptionData中?还有其他方法吗?您在正确的组件中使用过useSubscription吗?如果必须这样做,则必须接受额外的渲染。
希望我的回答对您的情况有所帮助。