【vue hook】useTimeoutLoading-接口请求超过几秒后再显示loading动画

每个页面都重复写同样的逻辑代码,不仅冗余而且效率低下,而vue3的组合式函数就能够复用逻辑。

大家是否有遇到过这样的需求,网速快的时候loading动画会一闪而过,要求接口请求超过0.3s后再显示loading动画。要怎么做呢?

具体思路是定义一个变量loadingVisible来控制loading动画的出现,使用定时器延迟并侦听loading变化。

代码

新建一个useTimeoutLoading.js文件,代码如下

js 复制代码
import { ref, unref, watch, onBeforeUnmount } from 'vue'

const useTimeoutLoading = (loading, time = 500) => {
    let timeout = null
    const loadingVisible = ref(false)
    watch(
        () => unref(loading),
        value => {
            if (timeout) {
                clearTimeout(timeout)
            }
            if (value) {
                timeout = setTimeout(() => {
                    loadingVisible.value = true
                }, time)
            } else {
                loadingVisible.value = false
            }
        }
    )

    onBeforeUnmount(() => {
        if (timeout) {
            clearTimeout(timeout)
        }
    })

    return loadingVisible
}

export default useTimeoutLoading

如何使用

js 复制代码
<script setup>
import { ref } from 'vue'
import useTimeoutLoading from './useTimeoutLoading.js'

const loading = ref(false)
const loadingVisible = useTimeoutLoading(loading)
// 假装请求接口
const getData = async () => {
  loading.value = true
  const res = await getApi()
  loading.value = false
}
getData()
</script>
相关推荐
Fighting_p1 小时前
【element UI】el-select 组件下拉数据某一行文字过多时,文字换行展示,避免el-select下拉框被撑宽,导致页面过丑
前端·javascript
未来之窗软件服务1 小时前
幽冥大陆(一百12)js打造json硬件管道——东方仙盟筑基期
开发语言·javascript·算法·json·仙盟创梦ide·东方仙盟·东方仙盟算法
王家视频教程图书馆1 小时前
vue3从本地选择一个视频 展示到视频组件中
前端·javascript·音视频
天外来鹿1 小时前
Map/Set/WeakMap/WeakSet学习笔记
前端·javascript·笔记·学习
紫_龙2 小时前
最新版vue3+TypeScript开发入门到实战教程之vue3与vue2语法优劣对比
前端·javascript·typescript
全栈小53 小时前
【前端】Vue 组件开发中的枚举值验证:从一个Type属性错误说起
前端·javascript·vue.js
Joker Zxc3 小时前
【前端基础(Javascript部分)】4、JavaScript的分支语句
开发语言·前端·javascript
꧁꫞꯭零꯭点꯭꫞꧂3 小时前
G6绘制机柜 以及机柜设备的demo
前端·javascript·vue.js
Lee川4 小时前
🚀 JavaScript 内存大揭秘:从“栈堆搬家”到“闭包时空胶囊”
前端·javascript·面试
唐叔在学习4 小时前
TodoList应用:SPA应用首屏性能优化实践
前端·javascript·性能优化