创建具有自定义的响应数据 通过拦截响应数据的读取和设置实现
需求:创建具有防抖功能的响应数据 监听对响应数据的连续更改 只响应最后一次更改
<template>
<input type="text" v-model="keyword" />
{{ keyword }}
</template>
<script>
import { customRef } from "vue";
export default {
name: "App",
setup() {
const keyword = useDebounceRef("Hello", 400);
return { keyword };
},
};
function useDebounceRef(initialValue, delay) {
let timer = null;
return customRef((track, trigger) => {
return {
get() {
// 跟踪 initialValue 值的变量
track();
return initialValue;
},
set(newValue) {
clearTimeout(timer);
timer = setTimeout(() => {
initialValue = newValue;
// 触发视图更新
trigger();
}, delay);
},
};
});
}
</script>