[Vue3]学习笔记-customRef

  • 概念
    按照文档中的说明:customRef 可以用来创建一个自定义的 ref,并对其依赖项跟踪和更新触发进行显式控制。它需要一个工厂函数,该函数接收 track 和trigger函数作为参数,并且应该返回一个带有 get 和 set 的对象。
    其实大致意思就是,我们可以按照自己的业务需求去自定义封装一个ref对象,在其内部可以使用get和 set去跟踪或更新数据,有点计算属性内味了哈~

  • 作用:创建一个自定义的 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
			function myRef(value,delay){
    
    
				let timer
				return customRef((track,trigger)=>{
    
    
					return {
    
    
						get(){
    
    
							console.log(`有人从myRef这个容器中读取数据了,我把${
      
      value}给他了`)
							track() //通知Vue追踪value的变化(提前和get商量一下,让他认为这个value是有用的)
							return value
						},
						set(newValue){
    
    
							console.log(`有人把myRef这个容器中数据改为了:${
      
      newValue}`)
							clearTimeout(timer)
							timer = setTimeout(()=>{
    
    
								value = newValue
								trigger() //通知Vue去重新解析模板
							},delay)
						},
					}
				})
			}

			// let keyWord = ref('hello') //使用Vue提供的ref
			let keyWord = myRef('hello',500) //使用程序员自定义的ref
			
			return {
    
    keyWord}
		}
	}
</script>


猜你喜欢

转载自blog.csdn.net/david_520042/article/details/131553786