【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>
相关推荐
掘金安东尼11 分钟前
Vercel:我们为 React2Shell 发起了一项价值 100 万美元的黑客挑战
前端·javascript·github
掘金安东尼14 分钟前
浏览器处理Base64数据的速度有多快?
前端·javascript·github
掘金安东尼15 分钟前
为不同场景设计多样化的页面过渡动画
前端·javascript·github
多仔ヾ20 分钟前
Vue.js 前端开发实战之 02-Vue 开发基础(1)
vue.js
持续升级打怪中22 分钟前
深入解析深浅拷贝:原理、实现与最佳实践
开发语言·前端·javascript
我有一棵树22 分钟前
空值合并运算符 ?? ,|| 的替代方案
前端·javascript
chilavert31828 分钟前
技术演进中的开发沉思-278 AJax :Rich Text(上)
前端·javascript·ajax
Jay丶32 分钟前
*** 都不用tailwind!!!哎嘛 真香😘😘😘
前端·javascript·react.js
Tomorrow'sThinker38 分钟前
篮球裁判犯规识别系统(四) foul_fn函数 上
java·前端·javascript
普通网友1 小时前
用 Next.js 15 做图片查看网站:图片双击放大的交互坑与修复
开发语言·javascript·交互