toRef修改数据会触发UI更新吗?
问题描述:
在查阅网上资料时,发现了一条对比, 说toRef()创建的响应式数据并不会触发 vue 模版更新, 并且toRef()的使用场景是"对象的多个属性都变成响应式数据,并且要求响应式数据和原始数据相关联,并且更新响应式数据时不更新界面"。 感觉和我测试的结果不一样
可以请老师给出下面4条对比的正确性吗,谢谢

51
收起
正在回答
1回答
同学你好,这里老师结合例子帮你分析
1、ref()
<template>
<div>
<p>{{state}}</p>
<button @click="myFn">按钮</button>
</div>
</template>
<script>
import { ref } from "vue";
export default {
name: "App",
setup() {
let obj = { name: "lnj" };
let state = ref(obj.name);
function myFn() {
state.value = "zs";
console.log(obj); //{name:"lnj"}
console.log(state); // {name:"zs"}
}
return { state, myFn }
}
}
</script>
<style>
</style>利用ref将一个对象中的属性变成响应式的数据,修改响应式的数据不会影响到原始数据,但会触发页面更新。
2、toRef()
<template>
<div>
<p>{{state}}</p>
<button @click="myFn">按钮</button>
</div>
</template>
<script>
import {ref, toRef} from "vue";
export default {
name: "App",
setup() {
let obj = {name:"lnj"};
let state = toRef(obj, "name");
function myFn() {
state.value = "zs";
console.log(obj); //{name:"zs"}
console.log(state); //{name:"zs"}
}
return {state, myFn}
}
}
</script>
<style>
</style>利用toRef将一个对象中的属性变成响应式的数据 ,修改响应式的数据会影响到原始数据的,但是如果响应式的数据是通过toRef创建的, 那么修改了数据并不会触发UI界面的更新。
3、toRefs
<template>
<div>
<p>{{state}}</p>
<button @click="myFn">按钮</button>
</div>
</template>
<script>
import { ref, toRef, toRefs } from "vue";
export default {
name: "App",
setup() {
let obj = { name: "lnj", age: 18 };
// let name = toRef(obj, "name");
// let age = toRef(obj, "age");
let state = toRefs(obj);
function myFn() {
// name.value = "zs";
// age.value = 666;
state.name.value = "zs";
state.age.value = 666;
console.log(obj); //{name:"zs", age:666}
console.log(state); //{name:"zs", age:666}
// console.log(name);
// console.log(age);
}
return { state, myFn }
}
}
</script>
<style>
</style>toRefs是批量创建ref类型数据,并和以前数据关联
希望可以帮到你,祝学习愉快!


恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星