【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>
相关推荐
weixin_638303111 小时前
uniapp组合式和选项式
javascript·vue.js·uni-app
【赫兹威客】浩哥1 小时前
【赫兹威客】框架模板-前端命令行部署教程
前端·vue.js
小妖6661 小时前
javascript 舍去小数(截断小数)取整方法
开发语言·前端·javascript
一殊酒2 小时前
【前端开发】Vue项目多客户配置自动化方案【一】
前端·vue.js·自动化
切糕师学AI2 小时前
Vue 中 keep-alive 组件的生命周期钩子
前端·vue.js·keep-alive·生命周期·activated·deactivated
daols882 小时前
vue2 表格如何使用 vxe-table 带列头复制单元格内容同步到 excel 中
vue.js·excel·vxe-table
晚霞的不甘2 小时前
Flutter for OpenHarmony 布局核心:Row 与 Column 深度解析与实战
android·前端·javascript·flutter
ethan.Yin2 小时前
element-plus 二次封装遇到的一点疑惑
javascript·vue.js·ecmascript
Ulyanov3 小时前
Impress.js 3D立方体旋转个人年终总结设计与实现
开发语言·前端·javascript·3d·gui开发
榴莲不好吃3 小时前
前端js图片压缩
开发语言·前端·javascript