显示的控制依赖追踪和触发响应,那就可以使用customRef
函数自定义一个ref
自定义ref
本质其实就是return customRef()
customRef
函数接受一个工厂函数,该工厂函数有两个参数,分别是用于追踪的track
与用于触发响应的trigger
,并且返回一个的对象,该对象需要有get
和set
方法
官方例子:使用自定义 ref 实现带防抖功能的 v-model :
function useDebouncedRef(value, delay = 200) {
let timeout
return customRef((track, trigger) => {
return {
get() {
track()
return value
},
set(newValue) {
clearTimeout(timeout)
timeout = setTimeout(() => {
value = newValue
trigger()
}, delay)
},
}
})
}
export default {
setup() {
return {
text: useDebouncedRef('hello'),
}
},
}
使用customRef函数自定义一个ref函数的步骤
- 函数返回customRef()
- customRef接受两个参数track和trigger
- customRef返回一个对象
- customRef返回的对象必须实现set和get方法
- 在get中显示调用track()表示该数据需要被追踪,在set中显示的调用trigger()表示当数据被修改时,需要更新UI界面