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

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

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

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

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

安裝:

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, // 頁(yè)面隱藏時(shí)不輪詢
      pollingInterval: 5000,     // 每5秒請(qǐng)求一次
    })
    return () => (
      <div>
        {loading.value ? '加載中...' : JSON.stringify(data.value)}
      </div>
    )
  }
})

優(yōu)勢(shì):

  • 內(nèi)置輪詢、緩存、錯(cuò)誤重試等功能
  • 支持自動(dòng)取消請(qǐng)求
  • 可與 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('請(qǐng)求失敗:', 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 ? '暫停輪詢' : '開(kāi)始輪詢'}
        </button>
        {loading.value ? '加載中...' : JSON.stringify(data.value)}
      </div>
    )
  }
})

優(yōu)勢(shì):

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

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

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

安裝:

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)勢(shì):

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

輪詢請(qǐng)求方案

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

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

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

輪詢的注意事項(xiàng)

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

控制輪詢頻率,避免頻繁請(qǐng)求影響性能。頁(yè)面不可見(jiàn)時(shí)暫停輪詢(如使用 visibilitychange 事件)

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

在組件銷毀時(shí)清除定時(shí)器或取消訂閱

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

請(qǐng)求失敗時(shí)進(jìn)行重試或提示用戶

4. 服務(wù)器壓力

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

總結(jié)

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

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

相關(guān)文章

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

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

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

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

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

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

    這篇文章主要介紹了Vue項(xiàng)目如何部署到Tomcat服務(wù)器上,Vue中自帶webpack,可以通過(guò)一行命令將項(xiàng)目打包,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    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)庫(kù)進(jìn)行處理,以下是詳細(xì)的實(shí)現(xiàn)方法,包括安裝依賴、代碼示例和優(yōu)化建議,需要的朋友可以參考下
    2025-02-02
  • vue3頁(yè)面query參數(shù)變化并重新加載頁(yè)面數(shù)據(jù)方式

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

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

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

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

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

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

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

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

    vuex2中使用mapGetters/mapActions報(bào)錯(cuò)的解決方法

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

    Vue封裝Axios請(qǐng)求和攔截器的步驟

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

最新評(píng)論

仲巴县| 定州市| 张家川| 齐河县| 珲春市| 甘南县| 鄂温| 丹江口市| 长寿区| 汝城县| 巴里| 哈尔滨市| 综艺| 新郑市| 正蓝旗| 诸城市| 运城市| 固原市| 屯门区| 阿巴嘎旗| 抚州市| 库尔勒市| 泰宁县| 驻马店市| 额敏县| 武定县| 皮山县| 朔州市| 前郭尔| 丹寨县| 汉中市| 稻城县| 中山市| 迁安市| 襄樊市| 五常市| 石屏县| 诸城市| 射阳县| 红安县| 镇巴县|