Vue3-2-setup概述(1)

本文详细比较了Vue2和Vue3中的响应式系统,包括props、attrs、ref以及reactive的使用方法,重点讲解了Vue3通过Proxy和Reflect实现的深度响应式处理,以及与Vue2中defineProperty方法的差异。

setup(props, context) / setup(props, {attrs, slots, emit})

  • props: 包含props配置声明且传入了的所有属性的对象

  • attrs: 包含没有在props配置中声明的属性的对象, 相当于 this.$attrs

  • slots: 包含所有传入的插槽内容的对象, 相当于 this.$slots

  • emit: 用来分发自定义事件的函数, 相当于 this.$emit

  • App.vue

测试文件
{{msg}}

<Child :msg=“msg” msg2=“context.attrs中测试文字” @X=“X”>

  • Child.vue
{{msg}}

ref


  1. 作用: 定义一个响应式的数据

  2. 语法: const xxx = ref(initValue)

  3. 返回的是一个ref对象,对象中value属性,如果需要对数据操作,通过ref对象调用value属性方式进行操作

  4. 操作数据: xxx.value

  5. HTML模板中操作数据: 不需要.value

  6. 一般用来定义一个基本类型的响应式数据

{{str}}
{{count}}

reactive


  1. 作用: 定义多个数据的响应式

  2. const proxy = reactive(obj): 接收一个普通对象然后返回该普通对象的响应式代理器对象

  3. 响应式转换是“深层的”:会影响对象内部所有嵌套的属性

  4. 内部基于 ES6 的 Proxy 实现,通过代理对象操作源对象内部数据都是响应式的

{{user}}

vue2与vue3响应式区别

=================================================================================

vue2的响应式


  1. 对象: 通过defineProperty对对象的已有属性值的读取和修改进行劫持(监视/拦截)
  • 问题:对象直接新添加的属性或删除已有属性, 界面不会自动更新,比如表单都是通过v-model双向绑定data里面的数据然后修改数据的
  1. 数组: 通过重写数组更新数组一系列更新元素的方法来实现元素修改的劫持
  • 问题: 直接通过下标替换元素或更新length, 界面不会自动更新 arr[1] = {}

Object.defineProperty(data, ‘count’, {

get () {},

set () {}

})

Vue3的响应式


  1. 通过Proxy(代理): 拦截对data任意属性的任意(13种)操作, 包括属性值的读写, 属性的添加, 属性的删除等
  • handler: 包含捕捉器(trap)的占位符对象,可译为处理器对象,也就是用来监视数据变化

  • traps提供属性访问的方法。这类似于操作系统中捕获器的概念

  • target被 Proxy 代理虚拟化的对象。它常被作为代理的存储后端,也就是目标对象

  1. 通过 Reflect(反射): 动态对被代理对象的相应属性进行特定的操作

  2. Vue3的响应是深度式的响应

Proxy 与 Reflect
### 项目概述 `vue3-antd-admin` 是一个基于 Vue3、Ant Design Vue、Vite 和 TypeScript 构建的通用后台管理框架。该项目实现了权限系统、动态菜单、表格集成等功能,设计简洁且开箱即用[^1]。 ### 使用指南 #### 安装与配置 确保安装了正确的开发环境和依赖版本。例如: ```bash vue -V @vue/cli 4.5.13 node -v v14.17.3 node-sass -v node-sass 4.14.1 (Wrapper) [JavaScript] libsass 3.5.5 (Sass Compiler) [C/C++] node-gyp -v v8.1.0 ``` 如果在安装过程中遇到问题,请检查这些版本是否匹配[^4]。 #### 动态菜单加载 `vue3-antd-admin` 支持动态菜单加载功能,这主要通过 Vue Router 的动态路由特性实现。Vue3 提供了一种简单的方式来创建单页应用程序(SPA),其中路由是非常重要的一部分。通过 Vue Router 可以动态地添加和删除路由,并提供导航菜单等有用的功能[^3]。 ### 示例与模板 #### 权限系统实现 `vue3-antd-admin` 实现了一个权限控制系统,允许开发者根据用户的权限来控制页面访问和操作权限。这种机制通常涉及前端路由守卫和组件级别的权限判断。 #### 表格集成 项目中集成了高效的表格组件,利用 Ant Design Vue 的 `a-table` 组件可以快速构建功能丰富的数据展示界面。例如: ```vue <template> <a-table :dataSource="data" /> </template> <script setup> import { ref } from &#39;vue&#39;; const data = ref([ { key: &#39;1&#39;, name: &#39;John Brown&#39;, age: 32, address: &#39;New York No. 1 Lake Park&#39;, }, // 更多数据... ]); </script> ``` ### 开发工具与技术栈 - **Vue3**: 提供响应式的数据绑定和组件化的开发模式。 - **Ant Design Vue**: 集成 Ant Design 设计语言的 Vue 实现,提供丰富的 UI 组件。 - **Vite**: 新一代前端构建工具,提供更快的冷启动速度和即时的热更新。 - **TypeScript**: 增强代码的可维护性和类型安全性。 ### 相关资源 - [项目地址](https://gitcode.com/gh_mirrors/vu/vue3-antd-admin) - [Vue Antd Admin 教程](https://gitcode.com/gh_mirrors/vu/vue-antd-admin)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值