Vue3学习笔记

本文介绍了在Vue3中使用Vite框架创建应用的方法,比较了OptionsAPI和CompositionAPI的优劣,讲解了setup语法、ref和reactive的区别,以及如何使用watch和watchEffect进行数据监视。此外,还涵盖了pinia状态管理、路由控制、响应式对象操作和组件间通信等内容。
摘要由CSDN通过智能技术生成

框架基本

推荐基于vite创建,直接准备好,之后按需加载

创建app

创建一个App组件ing挂载到id="app"的容器中

OptionsAPI与CompositionAPI

vue2使用的选项式API的弊端,数据、方法、计算属性等分散在data、method、computed中,如果想要新增或者修改,那么就需要分别修改分散的配置项,不利于维护和复用。

 自定义hooks

模块化封装

核心语法

setup

vue2中的data、method是可以访问到vue3的setup。

setup语法糖就是本来需要set(){}再return的,现在直接在script标签中添加setup,就不要return

ref与reactive

ref:基本类型、对象类型的响应式数据

模板中不需要.value,js/ts代码中需要

ref定义基本类型

ref定义对象类型,底层使用的reactive

reactive:只能定义对象类型的响应式数据

ref与reactive对比

reactive局限性:重新分配对象的时候会失去响应式,而ref不会

ref可以直接ref.value进行修改对象

使用建议

1、基本类型,只能ref

2.、对象类型层级不深,ref/reactive都可以

3、对象类型层级很深,推荐reactive

toRefs

直接解构赋值,修改新的name并不会引起person.name的变化

 使用toRefs,将reactive的每一个对象属性变成响应式对象

使用toRef,就需要指定属性,let n1 = toRef(person,'age')

computed计算属性

v-model数据双向绑定:输入框修改后,firstName也修改,修改后的值反映到{{firstName}}上

方法和计算属性的对比

方法是没有缓存的,每次都是重新调用,而计算属性有缓存,他发现依赖的值并没有发生变化,就直接读取之前计算好的值。

computed只读与可读可写

computed是一个ref对象,但是只读,不可以直接ref.value

watch:监视数据变化

watch返回的是一个接触监视的函数,watch(监视的对象,操作(newVal,oldVal)=>{},{配置})

监视以下四种数据

1、ref定义的数据:ref()

2、reactive定义的数据:reactive()

3、函数返回的一个值(getter函数)

4、一个包含上述内容的数组

场景一:监视ref定义的基本类型数据和对象类型数据

场景二:reactive定义的对象类型数据

默认开启深度监视,newVal、oldVal是同一个对象,值相同,都是新值

场景三:ref或reactive的对象类型的某个属性

1、属性是基本类型,函数式返回该值

2、属性是对象类型,可以直接获取,也可以函数式,推荐函数式

因为监视的是对象,默认开启深度监视,改变整个对象不触发

函数式返回的是地址值,所以就是整个对象,添加deep:true开启深度监视,整个对象和对象属性的改变都能监视。

使用建议:

监视对象里的属性值,最好写函数式,如果想要关注更细节的属性变化,添加deep:true

场景四:监视上述多个数据

watchEffect

watch要明确指出需要监视的对象,若有很多个对象,那所有对象都要罗列出来

watchEffect感觉更智能一点,无需明确指出,函数用到谁就监视谁

官网:立即运行一个函数,同时响应式地追踪其依赖,并在依赖更改时重新追踪其函数

ref属性

用在普通DOM标签上,获取的DOM节点;

用在组件标签上,获取的是组件实例对象;

TS

props

生命周期

创建、挂载、更新、销毁,先子后父

路由

基本使用

导航区、展示区、路由、路由规则

路由组件(路由渲染出的)一般放在views/pages文件夹下,一般组件(亲手写出来的)放在components

通过点击导航,消失的路由组件默认是被卸载掉的,需要的时候再挂载

路由器工作模式

1、history

2、hash

to两种写法

字符串写法、对象写法(name/path),后者使用的更多

嵌套路由

路由传参

useRoute

1、query参数

2、params参数 路由占位,只能用name

路由规则的props配置

不适用写法复杂,从useRoute身上获取,并进行响应式的解构赋值获取

props:true添加之后相当与帮我们传递了属性

两种写法:

replace属性

浏览器的历史记录有两种:push追加、replace替换

不能后退也不能前进,默认是push可以前进回退

编程式路由导航

应用场景:用户信息正确、时间设置

routerLink本身其实就是a标签

重定向

redirect

pinia

符合直觉的集中式状态管理(共享数据)

搭建pinia环境

存储、读取数据

修改数据

storeToRefs

将store中的数据转化为ref对象,方便使用

getters和$subscribe

当state中的数据,需要经过处理后再使用时,可以使用getters配置

subscribe可以监听数据的变化

组合式写法

组件通信

props

父传子传递值,子传父传递函数

自定义事件

defineEmits emit()

v-model

插槽

默认插槽

具名插槽

作用域插槽

其他API

shallowRef和shallowReactive

属性很多,只关心对象整体是否发生改变,效率高,不然每个属性发生变化ref都会响应

readonly和shallowReadonly

将一个响应式对象设置为只读 readOnly(ref对象/reactive对象),但是不能readOnly(999)

readOnly用于创建一个对象的深只读副本,所有层次都是只读;

shallowReadonly只作用于顶层属性,浅层只读,深层次的属性可以修改。

应用场景:保护重要的对象或属性值不被修改

toRaw与markRaw

获取一个对象的响应式对象,toRaw返回的对象不是响应式的,不会触发视图更新

markRaw:标记一个对象,使其永远不会成为响应式的对象

应用场景:

customRef

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值