自定义ref实现防抖

89 阅读1分钟

自定义防抖ref

import { customRef } from "vue"

export function debounceRef(value,duration = 1000){
    let timer 
    return customRef((track,trigger)=>{
        return {
            get(){
                // 收集依赖
                track()
                return value
            },
            set(val){
                // 派发更新
                clearTimeout(timer)
                timer = setTimeout(()=>{
                    trigger()
                    value = val
                },duration)
            }
        }
    })
    
}

页面调用

<script setup>
import {debounceRef} from './debounceRef'
const text = debounceRef('')
</script>

<template>
    <input type="text" v-model="text">
    <div>{{ text }}</div>
</template>

效果演示

该 ref 只会在1s后显示最终结果