当前位置:首页 > 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插件形式封装

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

集成现有库

现有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. 依赖收集:基于响应式数据自动重新请求

性能考虑

vue实现swr

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

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

标签: vueswr
分享给朋友:

相关文章

vue实现handsontable

vue实现handsontable

Vue 中实现 Handsontable 要在 Vue 项目中集成 Handsontable,可以使用官方提供的 @handsontable/vue 封装库。以下是一个完整的实现步骤。 安装依赖 确…

通过vue实现

通过vue实现

Vue 实现方法 安装 Vue 确保已安装 Node.js 和 npm,通过以下命令安装 Vue CLI: npm install -g @vue/cli 创建 Vue 项目 使用 Vue CLI…

vue实现flbook

vue实现flbook

Vue 实现类似 Flbook 的翻页效果 要实现类似 Flbook 的翻页效果,可以使用 Vue 结合 CSS 动画和 JavaScript 事件处理。以下是实现方法: 安装依赖 需要安装 vue…

vue实现发帖

vue实现发帖

使用 Vue 实现发帖功能 前端实现 创建发帖表单组件,包含标题和内容输入框,以及提交按钮。使用 v-model 绑定表单数据。 <template> <div>…

vue 实现聊天

vue 实现聊天

使用 Vue 实现聊天功能 创建 Vue 项目并安装依赖 确保已安装 Vue CLI,通过以下命令创建新项目: vue create chat-app 进入项目目录后,安装必要的依赖(如 Socke…

vue实现type切换

vue实现type切换

Vue 实现 Type 切换的实现方法 在 Vue 中实现 Type 切换功能可以通过动态组件、条件渲染或路由切换等方式实现。以下是几种常见方法: 使用 v-if 或 v-show 条件渲染 通过绑…