1.ref 定义响应式数据
import { ref, shallowRef, toRef, toRefs } from 'vue';
const refValue = ref('初始值')
refValue.value = '修改值'
<p>{{ refValue }}</p>
<div ref='dom'>这家伙是Dom</div>
const dom = ref<HTMLElement>()
Tip:接收变量名称 与 div 里 ref = ‘dom名称’ 中的dom 名称相同
1.shallowRef 浅层响应( 手动触发响应:triggerRef(data))
import { ref, isRef, shallowRef, triggerRef, customRef, toRef, toRefs } from 'vue';
const data = shallowRef({
name: 'lyon'
})
const data2 = ref({
name: 'lyon'
})
console.log(isRef(data));
console.log(isRef(data2));
const btnClick = () => {
data.value.name = 'shallowRef 变身'
triggerRef(data)
}
const btnClick = () => {
data2.valeu.name = 'ref 变身'
}
const btnClick = () => {
Tip:注意注意注意: 数据发生变化(不建议 shallowRef 和 ref 同步更新)
data.value.name = 'shallowRef 变身'
data.value = {
name: '强制变身'
}
data2.valeu.name = 'ref 变身'
}
<h1>{{data.name}}</h1>
<h1>{{data2.name}}</h1>
customRef 自定义ref
function LyonRef<T>(value: T) {
return customRef((track, trigger) => {
return {
get(value:T) {
track()
return value
},
set(newVal) {
value = newVal
trigger()
}
}
})
}
const lyonRef = LyonRef<string>('customRef')
lyonRef.value = 'xxxx'