vue3 之 手写一个防抖 ref 函数
有时候,我们表单的值需要随时根据用户输入的值更新,但是又不想每输入一个字,就更新一次,想要输入完表单的值再更新,这个时候我们就可以封装一个 防抖的 ref 函数。
具体代码
<script setup>
import { watch,ref,computed,unref } from "vue"
/**
* 防抖 ref 函数
* @params {value, delay}
* @return {value}
*/
function useDebouncedRef(value, delay = 200) {
// 定义传入进来的响应式变量
let temp = ref(value)
// 定时器 time
let time;
// 定义计算属性 InputValue
let inputValue = computed({
get(){
// 返回 temp 原始值
return unref(temp)
},
set(val){
// 如果已经有定时器了,清空定时器
if(time){
clearTimeout(time)
}
// 隔一会后才会更新数据
time = setTimeout(()=>{
temp.value = val
},delay)
}
})
// 返回计算属性
return inputValue;
}
const text = useDebouncedRef("hello")
/**
* 在 delay 的时间内一直输入,只会监听到一次 value 的改变
*/
watch(text, (value) => {
console.log(value)
})
</script>
<template>
<input v-model="text" />
</template>