toRef:
<template>
<p>toRef demo - {{ ageRef }} - {{ state.name }} {{ state.age }}</p>
</template>
<script setup>
import { toRef, reactive } from "vue";
const state = reactive({
age: 18,
name: "Lihy",
});
const ageRef = toRef(state, "age");
setTimeout(() => {
state.age = 25;
}, 1500);
setTimeout(() => {
ageRef.value = 30;
}, 3000);
</script>
toRefs:
<template>
<p>toRefs {{ ageRef }} {{ nameRef }}</p>
</template>
<script setup>
import { toRefs, reactive } from "vue";
const state = reactive({
age: 25,
name: "John Doe",
});
const { age: ageRef, name: nameRef } = toRefs(state);
setTimeout(() => {
ageRef.value = 18;
nameRef.value = "modify name";
console.log("state", state);
}, 2000);
</script>
ref:
ref为了将值类型变成响应式对象,这样页面就可以实时响应数据的变化。
由于在使用Vue框架中会使用到值类型,那么去实现响应式,就会有很多处理方案,所以ref的出现就可以进行统一规范。
在reactive中引用或者template中使用ref值的时候,不需要进行.value获取,其余都需要进行.value获取
ref为什么需要.value去获取值?
因为如果直接使用值类型,那么会丢失响应性。而对象类型则不同,不会丢失。
详情看如下代码:
let a=0
function computed(getter){
let val=1;
setTimeout(()=>val=getter(),1500)
return val
}
a=computed(()=>100)
let a=0
function computed(getter){
let ref={value:null};
setTimeout(()=>ref.value=getter(),1500)
return ref
}
a=computed(()=>100)
reactive:
为了将引用类型变成响应式对象。