每个页面都重复写同样的逻辑代码,不仅冗余而且效率低下,而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>