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
    评论
回答: Vue2和Vue3在全家桶方面有一些区别。在Vue3中,所有的逻辑和定义的数据需要写在`setup()`函数中,并且如果要定义响应式数据,需要将其最后通过`return`返回。这样整体上看,Vue3和Vue2在这方面并没有太大区别。然而,在Vue3.2版本中引入了`<script setup>`标签的语法糖,使得在这种情况下不再需要显式进行`return`操作,可以像写普通JavaScript一样编写Vue代码。另外,Vue全家桶包括了一些周边库,例如`vue-cli`用于创建Vue项目的脚手架,`vue-router`用于处理路由,`vuex`用于状态管理,`element-ui`是一个基于Vue的UI组件库等等。这些周边库在Vue的不同版本中可能会有一些差异。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Vue2 和vue3的区别](https://blog.csdn.net/xg1201/article/details/123966875)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [【vue2】vue全家桶介绍,学习vue必备](https://blog.csdn.net/m0_61118311/article/details/129530079)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [Vue2技术全家桶](https://blog.csdn.net/weixin_45210011/article/details/126555482)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值