toRaw和markRaw的使用
toRaw是一个函数,他的参数只能是一个响应式的对象,也就是被reactive处理过的数据。 返回的是源数据。也就是说相当于reactive的逆运算,把响应式数据还原成原始的普通对象。 markRaw:标记一个对象, 这个对象以后不管怎么操作,都不会变成响应式的。 以上两个初级中很少使用,主要用来针对一些特殊的数据做性能优化。 customRef 自定义的ref响应式数据,之前我们使用ref,数据的响应式是自动的,我们无法灵活控制,而customRef可以在读取和修改的时候做一些操作,有点类似watch监听。
customRef的使用
customRef是一个函数,有固定的语法。
- 他的参数是一个回调函数。
- 回调函数的返回值必须是一个对象
- 回调函数的返回值对象里面必须有两个属性,一个是get,一个是set,他们都是函数类型的,分别在数据的读写的时候触发。
- 回调函数的参数又是两个函数,vue3提供的,一个是track,写在get中表示追踪数据,一个是trigger,通知vue去重新解析模板
使用案例:输入input值,1秒后同步给页面展示
<template>
<div>
<input type="text" v-model="keyWord">
<div>{{keyWord}}</div>
</div>
</template>
<script>
import { ref ,customRef} from 'vue'
export default {
setup () {
function myRef(value,delay){
let timer = null
return customRef((track,trigger)=>{
return {
get(){
track()
return value
},
set(newValue){
clearTimeout(timer)
timer = setTimeout(()=>{
value = newValue
trigger()
},delay)
}
}
})
}
let keyWord = myRef('',1000)
return {keyWord}
}
}
</script>