最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vue中實(shí)現(xiàn)輪詢請求的三種主流方案詳解

 更新時間:2025年07月16日 09:02:52   作者:溫華從此不練劍  
這篇文章主要為大家詳細(xì)介紹了使用Vue實(shí)現(xiàn)輪詢請求的三種主流方案,包括vue-request、@vueuse/core 與 RxJS,感興趣的小伙伴可以了解下

1. 使用 vue-request 實(shí)現(xiàn)輪詢請求

vue-request 是一個類 React 的 ahooks 風(fēng)格的 Vue 數(shù)據(jù)請求 Hook 庫,非常適合 Vue 3 + Composition API 項目。

安裝:

npm install vue-request

示例代碼 

import { defineComponent } from 'vue'
import useRequest from 'vue-request'
import axios from 'axios'
export default defineComponent({
  setup() {
    const fetchData = async () => {
      const res = await axios.get('/api/realtime-data')
      return res.data
    }
    const { data, loading } = useRequest(fetchData, {
      pollingWhenHidden: false, // 頁面隱藏時不輪詢
      pollingInterval: 5000,     // 每5秒請求一次
    })
    return () => (
      <div>
        {loading.value ? '加載中...' : JSON.stringify(data.value)}
      </div>
    )
  }
})

優(yōu)勢:

  • 內(nèi)置輪詢、緩存、錯誤重試等功能
  • 支持自動取消請求
  • 可與 Vue 組件生命周期良好配合

2. 使用 @vueuse/core 實(shí)現(xiàn)輪詢

@vueuse/core 提供了大量 Vue 3 的組合式函數(shù),其中 useIntervalFn 是實(shí)現(xiàn)輪詢的理想選擇。

安裝:

npm install @vueuse/core

示例代碼

import { defineComponent, ref } from 'vue'
import { useIntervalFn } from '@vueuse/core'
import axios from 'axios'
export default defineComponent({
  setup() {
    const data = ref(null)
    const loading = ref(false)
    const fetchData = async () => {
      loading.value = true
      try {
        const res = await axios.get('/api/realtime-data')
        data.value = res.data
      } catch (error) {
        console.error('請求失敗:', error)
      } finally {
        loading.value = false
      }
    }
    const { pause, resume, isActive } = useIntervalFn(fetchData, 5000, {
      immediate: true,
      callback: fetchData
    })
    return () => (
      <div>
        <button onClick={isActive.value ? pause : resume}>
          {isActive.value ? '暫停輪詢' : '開始輪詢'}
        </button>
        {loading.value ? '加載中...' : JSON.stringify(data.value)}
      </div>
    )
  }
})

優(yōu)勢:

  • 精細(xì)控制輪詢啟動/暫停
  • 支持組件卸載時自動清理定時器
  • 可與其他組合函數(shù)結(jié)合使用(如 useFetch)

3. 使用 rxjs 實(shí)現(xiàn)輪詢

RxJS 是一個強(qiáng)大的響應(yīng)式編程庫,適合需要構(gòu)建復(fù)雜異步數(shù)據(jù)流的場景。

安裝:

npm install rxjs

示例代碼

import { defineComponent, onMounted, onUnmounted, ref } from 'vue'
import { interval, Subscription, from } from 'rxjs'
import { switchMap } from 'rxjs/operators'
import axios from 'axios'
export default defineComponent({
  setup() {
    const data = ref(null)
    const loading = ref(false)
    const error = ref(null)
    let subscription: Subscription
    onMounted(() => {
      subscription = interval(5000).pipe(
        switchMap(() => {
          loading.value = true
          return from(axios.get('/api/realtime-data'))
        })
      ).subscribe({
        next: (res) => {
          data.value = res.data
          loading.value = false
        },
        error: (err) => {
          error.value = err.message
          loading.value = false
        }
      })
    })
    onUnmounted(() => {
      if (subscription) subscription.unsubscribe()
    })
    return () => (
      <div>
        {loading.value && <p>加載中...</p>}
        {error.value && <p style="color: red;">{error.value}</p>}
        {data.value && <pre>{JSON.stringify(data.value, null, 2)}</pre>}
      </div>
    )
  }
})

優(yōu)勢:

  • 構(gòu)建復(fù)雜的數(shù)據(jù)流(如合并多個請求、節(jié)流、過濾)
  • 錯誤處理更強(qiáng)大
  • 支持取消訂閱,避免內(nèi)存泄漏

輪詢請求方案

方案特點(diǎn)適用場景
vue-request簡潔易用,基于函數(shù)式調(diào)用,內(nèi)置輪詢、防抖、節(jié)流等特性快速實(shí)現(xiàn)輪詢功能
@vueuse/core基于 Composition API,與 Vue 3 深度集成,提供 useIntervalFn 等工具函數(shù)更加靈活控制輪詢邏輯
rxjs強(qiáng)大的響應(yīng)式編程庫,支持復(fù)雜的數(shù)據(jù)流處理需要精細(xì)控制數(shù)據(jù)流和錯誤處理

輪詢的應(yīng)用場景分析

場景描述推薦方案
實(shí)時訂單狀態(tài)更新用戶查看訂單狀態(tài)是否已支付或完成@vueuse/core 或 vue-request
后臺任務(wù)進(jìn)度監(jiān)控如文件上傳、視頻轉(zhuǎn)碼等長時間任務(wù)rxjs(便于鏈?zhǔn)教幚恚?/td>
聊天應(yīng)用中的新消息檢測當(dāng)前頁面未使用 WebSocket 時vue-request(簡潔高效)
數(shù)據(jù)大屏展示多個圖表定期刷新數(shù)據(jù)@vueuse/core(可統(tǒng)一控制)

輪詢的注意事項

1. 性能優(yōu)化:

控制輪詢頻率,避免頻繁請求影響性能。頁面不可見時暫停輪詢(如使用 visibilitychange 事件)

2. 防止內(nèi)存泄漏

在組件銷毀時清除定時器或取消訂閱

3. 錯誤處理機(jī)制

請求失敗時進(jìn)行重試或提示用戶

4. 服務(wù)器壓力

盡量減少并發(fā)請求數(shù)量,合理設(shè)置間隔時間

總結(jié)

根據(jù)你的項目需求和技術(shù)棧,可以選擇最適合的輪詢方案。對于大多數(shù)中小型項目,推薦使用 vue-request  @vueuse/core;如果你有復(fù)雜的異步流程需求,rxjs 是更好的選擇。

到此這篇關(guān)于Vue中實(shí)現(xiàn)輪詢請求的三種主流方案詳解的文章就介紹到這了,更多相關(guān)Vue輪詢請求內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vue下跨域設(shè)置的相關(guān)介紹

    vue下跨域設(shè)置的相關(guān)介紹

    本篇文章主要介紹了vue下跨域設(shè)置的相關(guān)介紹,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08
  • 詳解element-ui動態(tài)限定的日期范圍選擇器代碼片段

    詳解element-ui動態(tài)限定的日期范圍選擇器代碼片段

    這篇文章主要介紹了element-ui動態(tài)限定的日期范圍選擇器代碼片段,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • Vue項目如何部署到Tomcat服務(wù)器上

    Vue項目如何部署到Tomcat服務(wù)器上

    這篇文章主要介紹了Vue項目如何部署到Tomcat服務(wù)器上,Vue中自帶webpack,可以通過一行命令將項目打包,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2024-03-03
  • Vue將el-table導(dǎo)出為excel文件的實(shí)現(xiàn)方法

    Vue將el-table導(dǎo)出為excel文件的實(shí)現(xiàn)方法

    在 Vue + Element UI 中,el-table 數(shù)據(jù)導(dǎo)出 Excel 文件,可以使用 xlsx(SheetJS)庫進(jìn)行處理,以下是詳細(xì)的實(shí)現(xiàn)方法,包括安裝依賴、代碼示例和優(yōu)化建議,需要的朋友可以參考下
    2025-02-02
  • vue3頁面query參數(shù)變化并重新加載頁面數(shù)據(jù)方式

    vue3頁面query參數(shù)變化并重新加載頁面數(shù)據(jù)方式

    在Web開發(fā)中,頁面間的跳轉(zhuǎn)及數(shù)據(jù)刷新是常見問題,通過使用$router.push和$router.replace方法,可以控制頁面跳轉(zhuǎn)的行為,具體操作時,若發(fā)現(xiàn)頁面ID變更后數(shù)據(jù)未刷新,可通過給router-view標(biāo)簽添加key值解決,若使用keep-alive
    2024-10-10
  • vue.js element-ui tree樹形控件改iview的方法

    vue.js element-ui tree樹形控件改iview的方法

    這篇文章主要介紹了vue.js element-ui tree樹形控件改iview的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-03-03
  • VUE元素的隱藏和顯示(v-show指令)

    VUE元素的隱藏和顯示(v-show指令)

    本篇文章主要介紹了VUE元素的隱藏和顯示(v-show指令),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • vue中使用@blur獲取input?val值

    vue中使用@blur獲取input?val值

    這篇文章主要介紹了vue中使用@blur獲取input?val值的實(shí)現(xiàn)方法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • vuex2中使用mapGetters/mapActions報錯的解決方法

    vuex2中使用mapGetters/mapActions報錯的解決方法

    這篇文章主要介紹了vuex2中使用mapGetters/mapActions報錯解決方法 ,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-10-10
  • Vue封裝Axios請求和攔截器的步驟

    Vue封裝Axios請求和攔截器的步驟

    這篇文章主要介紹了Vue封裝Axios請求和攔截器的步驟,幫助大家更好的對axios進(jìn)行封裝并將接口統(tǒng)一管理,同時為請求和響應(yīng)設(shè)置攔截器interceptors。,感興趣的朋友可以了解下
    2020-09-09

最新評論

元谋县| 大姚县| 罗源县| 台东县| 巴南区| 桂阳县| 浦县| 夏邑县| 神农架林区| 尉氏县| 璧山县| 铜陵市| 绍兴县| 梧州市| 称多县| 凤阳县| 博白县| 台东市| 奉贤区| 宁乡县| 叶城县| 横山县| 宁蒗| 大厂| 新平| 日喀则市| 和龙市| 东乌珠穆沁旗| 台中市| 乌拉特前旗| 吉安县| 安新县| 渝北区| 大庆市| 城口县| 大兴区| 名山县| 房产| 砀山县| 南充市| 乌恰县|