快速上手Vue3

简介: 快速上手Vue3

Option API 和 Composition API


在Vue2中,我们编写组件的方式是Options API:

  • Options API的一大特点就是在对应的属性中编写对应的功能模块;
  • 比如data定义数据、methods中定义方法、computed中定义计算属性、watch中监听属性改变,也包括生命周期钩子;
  • 弊端:对应代码的逻辑会被拆分到各个属性中

在Vue3中,我们编写组件的方式是Composition API (VCA):

  • 将同一个逻辑关注点相关的代码手机在一起;
  • 在Vue3 组建中,有个位置可以实际使用 Composition API,这个位置就是 setup函数


Setup 函数


setup函数中有两个参数:props和context

props: 就是父组件传递过来的属性被放到props对象中

注意:我们如果在setup函数中想要去使用props,不可以直接通过this去获取


context: 也称为 SetupContext,包含三个属性

  • attrs:所有非props 的attribute
  • slots:父组件传递过来的插槽
  • emit:当我们组件内部需要发出事件时会用到emit (这里不可以使用 this.$emit)

setup 函数有返回值,返回值才是可以在template 中被使用的。

但是,在setup 函数中的数据不是响应式的

微信图片_20221011145743.png

Reactive API 和 Ref API


使用 reactive 和 ref 函数可以实现setup函数中定义的数据提供响应式特性。


区别:

  • reactive API 对传入的数据类型有限制的,要求我们传入的是一个对象或者数组类型,即传入较为复杂的数据且是数据间有关系的。传入基本数据类型是会报警告的。
  • ref API 会返回一个可变的对象,该对象作为一个 响应式的引用 维护着它内部的值,它内部的值是在ref的 value 属性中被维护的。
  • 在模板中引入ref的值时,Vue会自动帮助我们进行解包操作,所以我们并不需要在模板中通过 ref.value 的方式来使用;
  • 但是在 setup 函数内部,它依然是一个 ref引用, 所以对其进行操作时,我们依然需要使用 ref.value的方式;
  • 两个函数的引入:

微信图片_20221011145847.png

微信图片_20221011145903.png

基本使用:


readonly


Vue 有个单项数据流的规范。如果通过子组件去修改父组件里的值是不符合规范的。

为了避免开发人员做这个不规范的操作,通过reactive或者ref可以获取到一个响应式的对象,传入给其他地方(组件)的这个响应式对象希望在另外一个地方(组件)被使用,但是不能被修改。

vue给我们提供了 readonly 方法,readonly会返回原始对象的只读代理

微信图片_20221011150024.png

在开发中常见的readonly方法会传入三个类型的参数:


  • 类型一:普通对象;
  • 类型二:reactive返回的对象;
  • 类型三:ref的对象;

注意:readonly返回的对象都是不允许修改的,但是经过raedonly处理过的对象时允许被修改的,readonly本质上只是在返回的对象的setter方法被劫持了而已。


补充:Reactive判断的API 和 ref判断的API

Reactive判断的API

操作

isProxy

检查对象是否是由 reactive 或 readonly创建的 proxy

isReactive

检查对象是否是由 reactive创建的响应式代理

isReadonly

检查对象是否是由 readonly 创建的只读代理

toRaw

返回 reactive 或 readonly 代理的原始对象

shallowReactive

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

shallowReadonly

创建一个 proxy,使其自身的 property 为只读,但不执行嵌套对象的深度只读转换

ref判断的API

操作

torefs

将reactive返回的对象中的属性都转成ref,实现解构数据响应式

unref

获取一个ref引用中的value

isref

判断值是否是一个ref对象

shallowRef

创建一个浅层的ref对象

triggerRef

手动触发和 shallowRef 相关联的副作用

computed 函数使用


当我们的某些属性是依赖其他状态时,我们可以使用计算属性来处理。

在vue2中,OptionAPI直接使用computed选项来完成

在vue3中,compositionAPI 我们可以在setup函数中使用 computed 方法来编写一个计算属性。


如何使用?

  • 方式一:接收一个getter函数,并为 getter 函数返回的值,返回一个不变的 ref 对象;
  • 方式二:接收一个具有 get 和 set 的对象,返回一个可变的(可读写)ref 对象;

微信图片_20221011150954.png

微信图片_20221011151010.png

Setup 中使用ref


只需要定义一个ref对象,绑定到元素或者组件的ref属性上即可

微信图片_20221011151043.png

生命周期钩子


setup 可以用来替代 data 、 methods 、 computed 等等这些选项,也可以替代 生命周期钩子

引用官网的图:

微信图片_20221011151117.png

因为 setup 是围绕 beforeCreate 和 created 生命周期钩子运行的,所以不需要显式地定义它们。换句话说,在这些钩子中编写的任何代码都应该直接在 setup 函数中编写


侦听数据的变化


咋 Option API 中,可以通过 watch 选项来侦听data 或者props 的数据变化,而在 Composition API中,可以通过watch和watchEffect 来完成响应式数据的侦听。

  • watchEffect:用于自动收集响应式数据的依赖;
  • watch:需要手动指定侦听的数据源;

注意:当侦听到某些响应式数据变化时,如果希望再执行某些操作,这个时候就可以使用 watchEffect

微信图片_20221011151211.png

微信图片_20221011151227.png setup 语法糖


当使用

<script setup> 范围里的值也能被直接作为自定义组件的标签名使用

注意:响应式数据需要通过ref、reactive来创建

微信图片_20221011151303.png


defineProps()、defineEmits()和 defineExpose()

为了在声明 props 和 emits 选项时获得完整的类型推断支持,我们可以使用 defineProps 和 defineEmits API,它们将自动 地在 <script setup>中可以使用


微信图片_20221011151355.png

使用

微信图片_20221011151420.png

相关文章
|
2月前
|
缓存 JavaScript UED
Vue3中v-model在处理自定义组件双向数据绑定时有哪些注意事项?
在使用`v-model`处理自定义组件双向数据绑定时,要仔细考虑各种因素,确保数据的准确传递和更新,同时提供良好的用户体验和代码可维护性。通过合理的设计和注意事项的遵循,能够更好地发挥`v-model`的优势,实现高效的双向数据绑定效果。
154 64
|
2月前
|
JavaScript 前端开发 API
Vue 3 中 v-model 与 Vue 2 中 v-model 的区别是什么?
总的来说,Vue 3 中的 `v-model` 在灵活性、与组合式 API 的结合、对自定义组件的支持等方面都有了明显的提升和改进,使其更适应现代前端开发的需求和趋势。但需要注意的是,在迁移过程中可能需要对一些代码进行调整和适配。
122 60
|
16天前
|
JavaScript API 数据处理
vue3使用pinia中的actions,需要调用接口的话
通过上述步骤,您可以在Vue 3中使用Pinia和actions来管理状态并调用API接口。Pinia的简洁设计使得状态管理和异步操作更加直观和易于维护。无论是安装配置、创建Store还是在组件中使用Store,都能轻松实现高效的状态管理和数据处理。
60 3
|
2月前
|
前端开发 JavaScript 测试技术
Vue3中v-model在处理自定义组件双向数据绑定时,如何避免循环引用?
Web 组件化是一种有效的开发方法,可以提高项目的质量、效率和可维护性。在实际项目中,要结合项目的具体情况,合理应用 Web 组件化的理念和技术,实现项目的成功实施和交付。通过不断地探索和实践,将 Web 组件化的优势充分发挥出来,为前端开发领域的发展做出贡献。
45 8
|
2月前
|
存储 JavaScript 数据管理
除了provide/inject,Vue3中还有哪些方式可以避免v-model的循环引用?
需要注意的是,在实际开发中,应根据具体的项目需求和组件结构来选择合适的方式来避免`v-model`的循环引用。同时,要综合考虑代码的可读性、可维护性和性能等因素,以确保系统的稳定和高效运行。
41 1
|
2月前
|
JavaScript
Vue3中使用provide/inject来避免v-model的循环引用
`provide`和`inject`是 Vue 3 中非常有用的特性,在处理一些复杂的组件间通信问题时,可以提供一种灵活的解决方案。通过合理使用它们,可以帮助我们更好地避免`v-model`的循环引用问题,提高代码的质量和可维护性。
49 1
|
2月前
|
JavaScript
在 Vue 3 中,如何使用 v-model 来处理自定义组件的双向数据绑定?
需要注意的是,在实际开发中,根据具体的业务需求和组件设计,可能需要对上述步骤进行适当的调整和优化,以确保双向数据绑定的正确性和稳定性。同时,深入理解 Vue 3 的响应式机制和组件通信原理,将有助于更好地运用 `v-model` 实现自定义组件的双向数据绑定。
|
2月前
|
存储 JavaScript 前端开发
vue3的脚手架模板你真的了解吗?里面有很多值得我们学习的地方!
【10月更文挑战第21天】 vue3的脚手架模板你真的了解吗?里面有很多值得我们学习的地方!
vue3的脚手架模板你真的了解吗?里面有很多值得我们学习的地方!
|
2月前
|
JavaScript 索引
Vue 3.x 版本中双向数据绑定的底层实现有哪些变化
从Vue 2.x的`Object.defineProperty`到Vue 3.x的`Proxy`,实现了更高效的数据劫持与响应式处理。`Proxy`不仅能够代理整个对象,动态响应属性的增删,还优化了嵌套对象的处理和依赖追踪,减少了不必要的视图更新,提升了性能。同时,Vue 3.x对数组的响应式处理也更加灵活,简化了开发流程。
|
2月前
|
JavaScript 前端开发 开发者
Vue 3中的Proxy
【10月更文挑战第23天】Vue 3中的`Proxy`为响应式系统带来了更强大、更灵活的功能,解决了Vue 2中响应式系统的一些局限性,同时在性能方面也有一定的提升,为开发者提供了更好的开发体验和性能保障。
89 7

热门文章

最新文章

下一篇
开通oss服务