vue3的ref reactive有啥区别,vue3.0 ref reactive

  vue3的ref reactive有啥区别,vue3.0 ref reactive

  这篇文章主要为大家介绍了vue3 ts中裁判员及反应的如何指定类型的实现示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  

目录

  参考的基础特性如何在裁判员中指定类型reactiveisRef、isReactivetoRef、toRefs、toRaw

  

ref 的基础特性

  裁判员约等于反应性({值:x })

  ref()可以定义时无参数,第一次赋值任意类型,然后就不能增加属性

  const refa=ref(6)

  const rcta=reactive({ value: 12 })

  console.log(refa:,refa) //RefImpl{.}

  console.log(refa:,refa.value) //6

  console.log(rcta:,rcta) //Proxy {value: 12}

  console.log(rcta.value:,rcta.value) //12

  const refb=ref({ name: bbb })

  console.log(refb:,refb.value,refb。价值。name)//Proxy { name: BBB } BBB

  //refb.value.age=18 //报错//类型{ name:string;}上不存在属性年龄

  

如何在ref中指定类型

  const a=ref()//根据输入参数推导字符串类型Refstring

  const b=refstring[]([]) //可以通过范型显示约束Refstring[]

  const c: Refstring[]=ref([]) //声明类型Refstring[]

  const list=ref([1,3,5])

  console.log(列表前:,list.value)

  list.value[1]=7

  console.log(列表后:,list.value)

  type typPeople={

  名称:字符串

  年龄:数量

  }

  const list 2:ref type people[]=ref([])

  console.log(list2-前:,list2.value) //{}不是空数组,而是空对象

  list2.value.push({ name:小张,年龄:18 })

  console.log(list2-后:,list2.value[0]) //{name:小张,年龄:18}

  ********* ref内部值指定类型*********

  const foo=refstring number(foo )

  foo.value=123

  ********* 如果裁判员类型未知,则建议将裁判员转换为参考:********

  函数useStateT(initial: T) {

  const state=ref(initial) as RefT

  返回状态

  }

  const item: typPeople={ name: aa ,年龄:18 }

  const x1=useState(item) //x1类型为:ReftypPeople

  const x2=ref(item) //x2类型为:Ref { name:string;年龄:号;}

  console.log(引用值:,x1.value,x1.value.name)

  //代理{name: aa ,年龄:18} aa

  

reactive

  返回对象的响应式副本

  reactive(x)必须要指定参数,所以类型就已经确定了,也不能增加属性

  const count=ref(1)

  console.log(ref:,count) //RefImpl{.}

  //当裁判员分配给反应的时,参考将自动解包

  const obj=reactive({ a: count }) //不需要计数。值

  console.log(obj.a) //1

  控制台。日志(对象。a===计数。value)//true

  //obj.b=7 //添加属性会报错//{ a:数字;}上不存在属性b

  //const str=reactive(aaa) //这是报错的,反应性参数只能是对象

  const arr=reactive([1,2]) //数组,其实结果还是对象

  const obj=reactive({ 0: 1,1: 2 })

  console.log(arr ,arr) //Proxy {0: 1,1: 2}

  console.log(obj ,obj) //Proxy {0: 1,1: 2}

  //反应性定义和裁判员不同,参考返回的是劫掠类型,反应性不存在反应

  //它返回是UnwrapNestedRefsT,和传入目标类型一致,所以不存在定义通用反应的类型

  函数反应函数扩展对象(目标:T) {

  const state=reactive(target)as UnwrapNestedRefsT

  返回状态

  }

  type typPeople={

  名称:字符串

  年龄:数量

  }

  const item: typPeople={ name: aa ,年龄:18 }

  const obj1=reactive(item) //obj1类型为:{ name:string;年龄:号;}

  const obj 2=反应资金(项目)//obj 2类型为:{ name:string;年龄:号;}

  

isRef、isReactive

  //isRef检查值是否为一个裁判员对象

  console.log(是否为ref:,isRef(count)) //true

  //isProxy检查对象是否是由反应的或只读的创建的代理人

  //只读是原始对象的只读代理

  console.log(ref是否为代理:",isProxy(count)) //false

  console.log(反应是否为代理:",isProxy(obj)) //true

  //isReactive检查对象是否是由反应的创建的响应式代理

  console.log(isReactive判断:,isReactive(obj)) //true

  

toRef、toRefs、toRaw

  ToRef为源响应对象上的元素创建一个新的reftoRefs,将响应对象代理转换为普通对象,所有元素指向原对象的reftoRaw,返回反应或只读代理的原对象toRef。当您想要将prop的Ref传递给复合函数时,toRef非常有用。

  恒定状态=反应({

  foo: 1,

  酒吧:2

  })

  console.log(state.foo) //1

  state.foo

  console.log(state.foo) //2

  const fooRef=toRef(状态, foo )

  fooRef.value

  Console.log(state.foo) //3但是state.foo没有. value属性,不要混淆。

  toRefs将响应对象代理转换为普通对象,所有元素指向原对象的ref。

  toRaw返回reactive或者readonly代理的原对象,当然也可以返回ref的原对象。

  恒定状态=反应({

  foo: 1,

  酒吧:2

  })

  console . log(state)//Proxy { foo:1,bar: 2}

  constref S1=tore fs(state)//tore fs将响应对象代理转换为普通对象。

  console.log(toRefs:,refs1) //{foo: ObjectRefImpl,bar: ObjectRefImpl}

  Const refs2=toRaw(state) //toRaw返回反应式或只读代理的原始对象。

  console.log(toRaw:,refs2) //{foo: 1,bar: 2}

  Const ref1=ref(5) //ref不是代理,而是RefImpl。

  Const refs3=toRefs(ref1) //不报错,但是没有意义。

  这就是vue3 ts中ref和reactive指定类型的实现示例的细节。更多关于vue3 ts中ref和reactive指定类型的实现,请关注我们的其他相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: