ref和reactive的使用场景区别
- ref可以包装基本类型、数组、对象;reactive只能用来包装引用类型。
- ref包装的数组和对象可以整体赋值,reactive包装的引用类型不能整体被赋值
- ref在script中需要'.value'出来;reactive不需要
常常这样用
1、基本类型用ref
let n = ref(0);
n.value = 1;
2、数组用ref
let arr = ref([1,2]);
arr.value = [1,2,3];
3、对象用reactive
let obj = reactive({name: 'jim'});
Object.assign(obj,{age: 18}); -> {name:'jim', age:18}
使用ref获取dom
<div ref="xx">
API选项中:
this.$refs.xx
setup中:
const xx = ref(),在onMounted中使用
customRef(costomRef可以理解为被拦截的ref)
const myRef = (value) => {
return customRef((track, trigger) => {
return {
get() {
track()
return value
},
set(newValue) {
if(newValue < 10) {
value = newValue
// 延迟渲染
setTimeout(() => {
trigger()
}, 2000);
}
}
}
})
}
从reactive对象中解构出属性作为响应式数据使用
let obj = reactive({
name: 'jim',
age: 18
})
let {name, age} = toRefs(obj) // 此时name和age就是响应式的数据