缓存 & SWR
通过设置 options.cacheKey,useRequest 会将当前请求成功的数据缓存起来。下次组件初始化时,如果有缓存数据,我们会优先返回缓存数据,然后在背后发送新请求,也就是 SWR 的能力。
你可以通过 options.staleTime 设置数据保持新鲜时间,在该时间内,我们认为数据是新鲜的,不会重新发起请求。
你也可以通过 options.cacheTime 设置数据缓存时间,超过该时间,我们会清空该条缓存数据。
SWR
下面的示例,我们设置了 cacheKey,在组件重新加载时,会优先返回缓存的内容,然后在背后重新发起请求。你可以通过点击按钮来体验效果。`
共享
当拥有相同的 cacheKey 时, 同时只会有一个在发起请求,后发起的将会共用同一个请求
当某个 cacheKey 发起请求时,其它相同 cacheKey 的内容均会随之同步
TIP
打开控制台 然后分别点击 Run 按钮, 查看 console.log 的打印
缓存时间
可以通过 cacheTime 设置缓存的回收时间,当缓存数据的时间超过了设定的 cacheTime (默认为 300000 毫秒,即 5 分钟),VueRequest 会自动丢弃该缓存的数据,等到下次发起请求后,重新缓存新的数据。
保鲜时间
如果你能确保缓存下来的数据,在一定时间内不会有任何更新的,你可以设置一个保鲜时间 staleTime (默认为 0,即不保鲜), 当设置保鲜时间后,VueRequest 在该时间内会认为缓存的数据是新鲜的,从而不会发起新的请求,这能为一些定时更新的接口减轻请求的压力。
删除缓存
Vue3Request 提供了一个 clearCache 方法,可以清除指定 cacheKey 或者是所有的缓存数据。
自定义缓存
通过配置 options.setCache 和 options.getCache,可以自定义数据缓存,比如可以将数据存储到 localStorage、IndexDB 等。
setCache和getCache需要配套使用。- 在自定义缓存模式下,
staleTime依旧可用,但是cacheTime和clearCache不会生效!请自行实现。
动态缓存
在实际项目中,我们经常需要根据不同的参数来生成不同的缓存 key,比如根据用户 ID、查询条件等。通过动态生成 cacheKey,我们可以为不同的用户或不同的查询条件缓存不同的数据。
下面的示例展示了如何根据用户 ID 动态生成缓存 key,不同的用户会有独立的缓存:
Options
| 参数 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| cacheKey | 缓存的唯一标识,相同 cacheKey 的请求会共享缓存 | string | ((params?: P) => string) | - |
| cacheTime | 缓存数据回收时间,超过该时间会清除缓存(毫秒),如果设置为 -1,则表示缓存数据永不过期 | number | 300000 (5 分钟) |
| staleTime | 数据保持新鲜时间,在该时间内认为数据是新鲜的,不会重新发起请求(毫秒),如果设置为 -1,则表示数据永远新鲜 | number | 0 |
| setCache | 自定义设置缓存 | (cacheKey: string, cacheData: CacheParamsType) => void | - |
| getCache | 自定义读取缓存 | (cacheKey: string) => CacheParamsType | - |
