这篇文章主要介绍了VueJs中toRef与toRefs函数怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇VueJs中toRef与toRefs函数怎么使用文章都会有所收获,下面我们一起来看看吧。
正文
refAPIsetup没有被响应式
API也就是往往在逻辑中修改了数据,但是页面不会更新,那怎么样将一个非响应式数据变成响应式数据
就需要用到
toRef()toRefs()componsition API单纯的去看概念,往往比较抽象,是难以理解的,还是需要从具体的实例出发
toRef()函数
作用:创建一个
refvalue也就是基于响应式对象上的一个属性,创建一个对应的
refref改变源属性的值将更新
ref语法:
const如:const name = toRef(person,'name')
应用: 要将响应式对象中的某个属性单独提供给外部使用时,不想丢失响应式,把一个
propref缺点:
toRef()<script setup>
import { reactive } from "vue";
const person = reactive({
   name:"川川",
   age: 18,
   job: {
     web: '前端开发',
     trade: '互联网'
   } 
});
</script>那在模板当中想要渲染数据可以这么写
{{person.name}} -{{person.age}}-{{person.job.web}}-{{person.job.trade}}如果不想在模板当中,写那么长,那么可以先解构,如下所示
<script setup>
import { reactive } from "vue";
const person = reactive({
   name:"川川",
   age: 18,
   job: {
     web: '前端开发',
     trade: '互联网'
   } 
});
const { name, age} = person;
const { web,trade} = person.job;
</script>那在模板中,可以直接使用变量的,如下所示
{{name}}-{{age}}-{{web}}-{{trade}}现在,如果我们想要去修改变量数据,会发现,逻辑中的数据会被修改,但是页面中的数据不会更新,也就是丢失了响应式 比如:如下模板,分别修改名字,年龄属性
<button @click="handleChangeAttrs">修改属性</button>那在逻辑代码中
<script setup>
import { reactive } from "vue";
const person = reactive({
   name:"川川",
   age: 18,
   job: {
     web: '前端开发',
     trade: '互联网'
   } 
});
const { name, age} = person;
const { web,trade} = person.job;
// 这样直接操作数据是无法修改的,因为它不是一个响应式数据,只是一个纯字符串,不具备响应式
function handleChangeAttrs() {
    name = "itclanCoder";
    age = 20;
}
</script>如果想要修改数据,支持响应式,将一个非响应式数据,变成一个响应式数据,需要借用toRef(源对象,源对象下指定的属性)函数,如下所示
<script setup>
import { reactive,toRef } from "vue";
const person = reactive({
   name:"川川",
   age: 18,
   job: {
     web: '前端开发',
     trade: '互联网'
   } 
});
// 想要修改指定哪个对象具备响应式,那么就使用toRef函数处理,toRef(源对象,源对象下的某个属性)
const name = toRef(person,'name');  
const age = toRef(person,'age');
// 经过了toRef的处理,修改变量的值,那么就需要xx.value
function handleChangeAttrs() {
    name.value = "itclanCoder";
    age.value = 20;
}
</script>在模板当中,仍然是如上所示
{{person}}
{{name}}-{{age}}-{{web}}-{{trade}}
<button @click="handleChangeAttrs">修改属性</button>你会发现使用
toRef()如果只是用于纯数据页面的展示,那是没有必要将数据转化为响应式数据的,如果需要修改数据,那么就需要将非响应式数据转化为响应式数据
是通过
toRef()与ref的不同
如果你用
refreftoRef<script setup>
import { reactive,toRef } from "vue";
const person = reactive({
   name:"川川",
   age: 18,
   job: {
     web: '前端开发',
     trade: '互联网'
   } 
});
// 使用ref
const name = ref(person.name);  
const age = toRef(person.age);
// 经过了toRef的处理,修改变量的值,那么就需要xx.value
function handleChangeAttrs() {
    name.value = "itclanCoder";
    age.value = 20;
}
</script>修改数据,页面数据会更新,但是源数据不会同步,修改,并无引用关系,
refref()toRefs()函数
toRef()toRef()那么这个
toRefs()toRef()ref语法:
toRefs(源对象)toRefs(person)如上面的示例代码,修改为
toRefs()<script setup>
import { reactive,toRefs } from "vue";
const person = reactive({
   name:"川川",
   age: 18,
   job: {
     web: '前端开发',
     trade: '互联网'
   } 
});
// 通过toRefs()批量处理,此时通过解构
const {name,age} = toRefs(person);  
// 经过了toRef的处理,修改变量的值,那么就需要xx.value
function handleChangeAttrs() {
    name.value = "itclanCoder";
    age.value = 20;
}
</script>当从组合式函数中返回响应式对象时,
toRefsimport { toRefs } from "vue";
function useFeatureX() {
  const state = reactive({
    foo: 1,
    bar: 2
  })
  // 在返回时都转为ref
  return toRefs(state)
}
// 可以解构而不会失去响应性
const { foo, bar } = useFeatureX()注意事项
toRefsrefreftoRef为啥需要toRef()与toRefs()函数
目的:在保证不丢失响应式的前提下,把对象进行解构,方便对象数据分解和扩散
前提:针对的是响应式对象(
reactive注意:不创造响应式(那是
reactivetoReftoRefs以上就是VueJs中toRef与toRefs函数怎么使用的详细内容,更多关于VueJs中toRef与toRefs函数怎么使用的资料请关注九品源码其它相关文章!