当前位置:首页 > 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. 依赖收集:基于响应式数据自动重新请求

性能考虑

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

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

vue实现swr

标签: vueswr
分享给朋友:

相关文章

vue实现单词反转

vue实现单词反转

实现思路 在Vue中实现单词反转功能,可以通过多种方式完成。核心思路是利用JavaScript的字符串处理方法,将输入的单词或句子拆分为数组,反转数组后再拼接成字符串。 方法一:使用计算属性 通过…

vue怎么实现数据检测

vue怎么实现数据检测

Vue 数据检测的实现方式 Vue 通过响应式系统实现数据检测,核心机制基于 Object.defineProperty(Vue 2)或 Proxy(Vue 3)。以下是具体实现方法: 基于 Vue…

vue登录业务的实现

vue登录业务的实现

实现登录业务的基本流程 在Vue中实现登录业务通常涉及前端界面设计、表单验证、API请求交互、状态管理以及路由控制等环节。以下是核心实现步骤: 登录表单设计与验证 创建包含用户名和密码输入框的登录组…

vue播放倍速怎么实现

vue播放倍速怎么实现

实现Vue播放倍速的方法 在Vue中实现播放倍速功能通常涉及HTML5的<video>元素或第三方播放器库。以下是几种常见实现方式: 使用原生HTML5 video元素 通过ref获取…

vue实现收起展开面板

vue实现收起展开面板

实现收起展开面板的方法 在Vue中实现收起展开面板功能可以通过多种方式完成,以下是几种常见的实现方法: 使用v-show或v-if控制显示隐藏 利用Vue的指令可以轻松实现面板的展开和收起:…

vue实现下载暂停

vue实现下载暂停

Vue实现下载暂停功能 在Vue中实现下载暂停功能,通常需要结合XMLHttpRequest或Fetch API的AbortController来控制请求中断。以下是具体实现方法: 使用XMLHtt…