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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。