当前位置:首页 > VUE

vue实现swr

2026-01-13 02:54:00VUE

vue实现SWR(Stale-While-Revalidate)模式

SWR是一种数据获取策略,优先返回缓存中的旧数据(stale),同时在后台重新验证(revalidate)并更新数据。以下是Vue中实现SWR的几种方法:

使用Composition API实现基础SWR

import { ref, onMounted } from 'vue'

export function useSWR(key, fetcher) {
  const data = ref(null)
  const error = ref(null)
  const isValidating = ref(false)

  async function revalidate() {
    isValidating.value = true
    try {
      const newData = await fetcher(key)
      data.value = newData
    } catch (err) {
      error.value = err
    } finally {
      isValidating.value = false
    }
  }

  onMounted(revalidate)

  return {
    data,
    error,
    isValidating,
    revalidate
  }
}

添加缓存层优化

const cache = new Map()

function useSWR(key, fetcher) {
  // ...之前的代码

  onMounted(() => {
    if (cache.has(key)) {
      data.value = cache.get(key) // 先返回缓存
    }
    revalidate() // 后台更新
  })

  async function revalidate() {
    // ...之前的代码
    cache.set(key, newData) // 更新缓存
  }
}

使用Vue插件形式封装

vue实现swr

const SWRPlugin = {
  install(app) {
    app.config.globalProperties.$swr = (key, fetcher) => {
      // 实现逻辑同上
    }
  }
}

集成现有库

现有Vue SWR实现库可供直接使用:

vue实现swr

  • vue-query:提供类似React Query的功能
  • @vueuse/core:包含useFetch等组合式函数
  • swrv:专为Vue设计的SWR库

示例使用swrv库

import useSWRV from 'swrv'

export default {
  setup() {
    const { data, error } = useSWRV('/api/user', fetcher)

    return { data, error }
  }
}

关键优化点

  1. 请求去重:避免同时发起多个相同请求
  2. 缓存策略:设置合理的缓存过期时间
  3. 错误重试:实现指数退避重试机制
  4. 依赖收集:基于响应式数据自动重新请求

性能考虑

  • 对于高频更新数据,适当增加revalidate间隔
  • 对关键数据可设置dedupingInterval避免重复请求
  • 对大型数据集考虑分页或懒加载

实现SWR模式时,应根据具体应用场景调整缓存策略和更新频率,平衡实时性和性能。

标签: vueswr
分享给朋友:

相关文章

vue实现登出

vue实现登出

实现Vue登出功能 登出功能通常涉及清除用户会话、令牌或本地存储的数据,并重定向到登录页面。以下是几种常见的实现方式: 清除用户令牌和状态 在Vuex的store中定义一个logout mutati…

vue 实现拖动

vue 实现拖动

Vue 实现拖动的几种方法 在Vue中实现拖动功能可以通过多种方式,包括原生HTML5的拖放API、第三方库如vuedraggable等。以下是几种常见的实现方法: 使用HTML5拖放API HTM…

vue实现接口

vue实现接口

在 Vue 中实现接口请求 Vue 本身不直接提供 HTTP 请求功能,通常需要借助第三方库如 axios 或 fetch 来实现接口请求。以下是几种常见方法: 使用 axios 发送请求 安装 a…

vue实现京东

vue实现京东

Vue 实现京东电商网站的关键步骤 项目搭建与基础配置 使用 Vue CLI 或 Vite 初始化项目,安装 Vue Router 管理路由,Vuex/Pinia 管理状态。配置基础 UI 框架如 E…

vue实现队列

vue实现队列

Vue 实现队列功能 在 Vue 中实现队列功能可以通过多种方式完成,以下是几种常见的方法: 使用数组模拟队列 队列遵循先进先出(FIFO)原则,可以用数组的 push 和 shift 方法模拟入队…

vue实现复制

vue实现复制

Vue 实现复制功能 在 Vue 中实现复制功能可以通过多种方式完成,以下是几种常见的方法: 方法一:使用 Clipboard API Clipboard API 是现代浏览器提供的一种原生 AP…