我第一次在next.js中使用SWR钩子,我试图得到一些关于某些东西的答案,但是我无法得到它们,即使是在文档中。
Questions:所以,我知道SWR提供了一个包含数据的缓存,并且它会实时更新,但是我有点迷失在两个选项之间--您必须使用钩子。所以,通常情况下,您有dedupeInterval和refreshInterval
refreshInterval = 0: polling interval (disabled by default)
dedupingInterval = 2000: dedupe requests with the same key in this time span
那么,这两者有什么区别呢?如果我有两个密钥相同的请求,它将在两秒钟后更新吗?它和refreshInterval一样吗?如果我使用refreshInterval,我的性能会有问题吗?因为它在很短的时间内提出了一个请求
如果你能帮我,那就太好了!
谢谢你抽出时间!!
发布于 2021-05-28 21:13:30
那么,这两者有什么区别呢?
不同之处在于:
refreshInterval
正在定义一个时间,在此之后,将发送一个新的请求来更新您的数据。例如:每一秒。dedupeInterval
正在定义一段时间,在此期间,如果已经发送了对特定数据的请求(即。一个具有特定键的数据),当呈现请求刷新该数据的新请求的组件时,刷新将不会执行。去重复意味着消除重复。提出潜在的更少的要求,而不是更多。它们为他们的文档中的一个例子提供一个组件,该组件呈现5倍于另一个名为<Avatar />
的组件,该组件使用swr钩子。但是实际的请求将只提出一次,因为呈现将在默认的2秒时间范围内进行。
如果我有两个密钥相同的请求,它将在两秒钟后更新吗?它和refreshInterval一样吗?
不,设置为2秒的dedupeInterval
不会自动更新数据。只有当使用带有swr钩子的相同键的组件在2秒后被重命名时,它才会更新它。或者,如果您还没有禁用其他更新机制,比如on和用户将焦点放在您的组件上。
使用refreshInterval
时,只要组件仍然被挂载,就会有一个API调用,即使它没有重登,用户也不与它交互。
如果我使用refreshInterval,我的性能会有问题吗?因为它是在很短的时间内提出要求的。
是的,如果用户打开页面,只在20秒内读取内容,并且您已经将refreshInterval
设置为1秒,那么在此期间将有20个API调用来更新该数据。如果您的数据每隔几秒钟更改一次,并且需要更新UI,则这种行为可能很有用。但很明显,这可能是一个性能问题。
默认情况下禁用refreshInterval
,而dedupeInterval
设置为2秒的原因是为了避免过多的API调用。
https://stackoverflow.com/questions/67705669
复制相似问题