Vue3学习之provide 与 inject,customRef

本文介绍了Vue中的provide/inject机制用于实现跨级组件通信,并展示了如何使用customRef创建带延迟的自定义ref以实现防抖功能。实例演示了如何在组件间传递数据和控制输入框的更新频率。
摘要由CSDN通过智能技术生成

一、provide 与 inject

作用:实现祖孙(跨级)组件间通信。
套路:父组件有一个provide选项来提供数据,后代组件有一个inject选项来开始使用这些数据。

具体写法
祖组件中:

setup(){
	let car = reactive({name:'奔驰', price:'40万'})
	provide('car', car)
}

后代组件中:

setup(props, context){
	const car = inject('car')
	return {car}
}

二、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
		function myRef(value, delay){
		let timer
			return customRef((track, trigger)=>{
				return {
					get(){
						console.log(`有人读${value}数据了`)
						track() // 通知Vue追踪Value的变化
						return value
					},
					set(newVaule){
						console.log(`有人写${newValue}数据了`)
						clearTimeout(timer)
						setTimeout(()=>{
							value = newValue
							trigger() //通知Vue重新解析模板
						}, delay)
					}
				}
			})
		}
		//let keyWord = ref('hello') //使用Vue提供的ref - 精装版-拎包入住
		let keyWord = myRef('hello', 500) //使用自己自定义的ref - 毛坯版-自己装修
		return{keyWord}
	}
}
</script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值