You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vue3中使用swrv实现可变refreshInterval的动态轮询问题

动态修改swrv的refreshInterval实现方案

swrv的配置项支持响应式参数,你可以通过把refreshInterval绑定到响应式变量上,让swrv自动感知变化并调整轮询间隔。以下是具体实现:

核心思路

  • 用响应式变量(Vue的ref或React的useState)存储当前轮询间隔
  • 将变量以函数形式传入swrv的refreshInterval配置中(确保swrv能捕获到变量更新)
  • 点击按钮时直接更新响应式变量即可切换轮询间隔

Vue 3示例代码

<script setup>
import useSWRV from 'swrv'
import { ref } from 'vue'

// 初始化轮询间隔为5秒
const refreshInterval = ref(5000)
const fetcher = () => fetch('/api/data').then(res => res.json())

const { data, error } = useSWRV('some key', fetcher, {
  refreshInterval: () => refreshInterval.value
})

// 点击按钮切换为10秒轮询
const changeInterval = () => {
  refreshInterval.value = 10000
}
</script>

<template>
  <button @click="changeInterval">改为10秒轮询</button>
  <div v-if="data">{{ data }}</div>
  <div v-if="error">请求出错:{{ error }}</div>
</template>

React示例代码

import useSWRV from 'swrv'
import { useState } from 'react'

function App() {
  // 初始化轮询间隔为5秒
  const [refreshInterval, setRefreshInterval] = useState(5000)
  const fetcher = () => fetch('/api/data').then(res => res.json())

  const { data, error } = useSWRV('some key', fetcher, {
    refreshInterval: () => refreshInterval
  })

  // 点击按钮切换为10秒轮询
  const changeInterval = () => {
    setRefreshInterval(10000)
  }

  return (
    <div>
      <button onClick={changeInterval}>改为10秒轮询</button>
      {data && <div>{JSON.stringify(data)}</div>}
      {error && <div>请求出错:{error.message}</div>}
    </div>
  )
}

export default App

关键说明

swrv会自动监听refreshInterval配置的返回值变化,更新响应式变量后,它会自动销毁旧的轮询定时器,启动新间隔的定时器,无需手动处理定时器的生命周期。

内容的提问来源于stack exchange,提问作者Artur Carvalho

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 21:45:36