SWR 不提供陈旧数据?

SWR not serving stale data?

我的印象是 SWR 应该 return 在使用来自 API 的新信息更新视图之前加载页面上的陈旧数据。

我制作了一个具有简单 API 超时的基本 Nextjs 应用程序,它正在“加载”- 我添加到 API 的 5 秒超时 - 每次。我的印象是它应该在 API 调用 returns?

更新之前提供以前缓存的版本

维塞尔 URL - https://swr-test-mkhx72bz3-webknit.vercel.app/

回购 - https://github.com/webknit/swr-test

index.js

import useSWR from 'swr'

const fetcher = (...args) => fetch(...args).then(res => res.json())

export default function Home() {

    const { data, error } = useSWR('/api/hello', fetcher)

  if (error) return <div>failed to load</div>
  if (!data) return <div>loading...</div>

  return (
    <div>{data.num}</div>
  )
}

hello.js

export default function handler(req, res) {

    setTimeout(() => {
        res.status(200).json({ num: Math.floor(Math.random() * 5000) })
    }, 5000)
  
}

我不是专家,但是“每次”是指每次重新加载网页时吗? SWR 不会为您缓存网页刷新之间的值。

此上下文中的缓存意味着使用相同 swr 密钥(“/api/hello”)的两个组件只会导致对 api 的一次调用。因此,哪个组件首先调用 swr 将获得 api 响应,第二个组件将从缓存中获得相同的值。

但是 swr 之后仍然可以多次调用 api 以“重新验证”并将更新后的响应发送到使用该密钥的两个(或所有)组件。