vue3学习——Reactive全家桶

reactive

返回对象的响应式副本,响应式转换是“深层”的——它影响所有嵌套 property。

ref一般用来绑定简单数据类型,

reactive源码中限制了绑定的数据类型,只能绑定复杂数据类型( Object ,Array ),否则会报错

引入

import { reactive } from "vue"

定义变量

数组:

let arr = reactive<Number[]>([])
//或者
type O = Number[]
let arr = reactive<O>([])

对象 :

let obj = reactive({
    name:"皮皮鲁",
    info:{
        sex:"male"
        }
    })

修改

//视图1
<div v-for="item in arr"> {{ item }} <div>

//视图2
<div v-for="item in arrObj.arr">{{ item }}</div>

//视图3
<div>{{obj.name}}<div>

//视图4
<div>{{obj.info.sex}}</div>

数组: 

arr = [1,2,3] //视图1 不更新  重新赋值破坏了原响应式

//方法1:解构赋值
arr.push(...[1,2,3]) //视图1更新

//方法2: 通过一个对象绑定arr
type O={
    arr:number[]
}
let arrObj = reactive<O>({
    arr:[]
}

arrObj.arr=[1,2,3] //视图2更新

对象:

obj.name = "鲁西西"  //视图3更新

onj.info.sex = "female" //视图4更新


 注:reactive 将解包所有深层的 refs,同时维持 ref 的响应性。

即 

const testR = () => {
  let a = ref(1)
  let b = reactive({ a })
  let c = reactive({
    a: 1
  })
  console.log('[ b.a ] >', b.a)
  console.log('[ c.a ] >', c.a)
  console.log('[ a.value ] >', a.value)
}
testR()

//输出
//[ b.a ] > 1
//[ c.a ] > 1
//[ a.value ] > 1

readonly

接受一个对象 (响应式或纯对象) 或 ref 并返回原始对象的只读代理。只读代理是深层的:任何被访问的嵌套 property 也是只读的。

let obj = reactive({ a : 1 })
let copy = readonly(obj)

console.log(copy.a) //1
copy.a++  //警告

shallowReactive

创建一个响应式代理,它跟踪其自身 property 的响应性,但不执行嵌套对象的深层响应式转换 (类似于shallowRef)。

引入

import { shallowReactive } from "vue"

定义变量

let obj = shallowReactive({
    name:"皮皮鲁",
    info:{
        sex:"male"
        }
    })

修改

//视图1
<div>{{obj.name}}</div>

//视图2
<div>{{obj.info.sex}}</div>
const change1=()=>{
obj.name="鲁西西"
}

const change2=()=>{
obj.info.sex="female" 
}

const change3=()=>{
obj.info.sex="female" 
obj.name="鲁西西"
}

change1()   //视图1更新
change2()   //视图2不更新
change3()   //视图 1 2 更新

注 :自身响应性property改动会触发嵌套对象的视图更新,挂载之前的数据操作也会在视图生效

shallowReadonly

readonly() 的浅层作用形式

和 readonly() 不同,这里没有深层级的转换:只有根层级的属性变为了只读。属性的值都会被原样存储和暴露,这也意味着值为 ref 的属性 不会被自动解包了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值