视频内容
customRef
作用:创建一个自定义的 ref,并对其依赖项跟踪和更新触发进行显式控制。
实现防抖效果:
<template>
<input type="text" v-model="keyWord">
<h3>{{keyWord}}</h3>
</template>
<script>
import {ref,customRef} from 'vue'
export default {
name: 'App',
setup() {
//自定义一个ref(), 名为:myRef()
// ref() ∈ 精装房, customRef() ∈ 毛坯房
//参数:
// value
// delay
function myRef(value,delay){
let timer
//customRef(函数(),该函数必须返回一个对象)
// track 追踪
// trigger
return customRef((track,trigger)=>{
return { //返回一个对象
get(){
console.log(`有人从myRef这个容器中读取数据了,我把${value}给他了`)
track() //通知Vue追踪value的变化(提前(获取value之前)和get商量一下,让他认为这个value是有用的)
return value
},
set(newValue){
console.log(`有人把myRef这个容器中数据改为了:${newValue}`)
clearTimeout(timer)
//等 delay(ms) 再调用 trigger()
timer = setTimeout(()=>{
//将 设置的新值 赋值给 调用myRef()传递过来的参数value
value = newValue
trigger() //通知 Vue 去重新 解析模板
},delay)
},
}
})
}
// let keyWord = ref('hello') //使用Vue提供的ref
let keyWord = myRef('hello',500) //使用程序员自定义的ref
return {keyWord}
}
}
</script>
