1、新增特性
1.Composition API(组合API)
- setup配置
- ref与reactive
- watch与watchEffect
- provide与inject
2.新的内置组件
- Fragment
- Teleport
- Suspense
3.其他改变
- 新的生命周期钩子
- data选项应始终被声明为一个函数
- 移除keyCode支持作为v-on的修饰符
2、创建项目
1.Vue-cli脚手架搭建项目
注意:yarn安装npm install -g yarn
2.使用vite创建
- 什么是vite?—— 是Vue团队打造的新一代前端构建工具。
- 优势如下:
- 1、开发环境中,无需打包操作,可快速的冷启动。
- 2、轻量快速的热重载(HMR)。
- 3、真正的按需编译,不再等待整个应用编译完成。
-
npm init @vitejs/app <项目名>
3、Composition API
1、是什么?
2、为什么使用CompositionAPI?
3、函数
4、setup
setup()函数是vue3.0中,专门为组件提供的新属性,它为我们使用vue3的CompositionAPI新特性提供了统一的入口。
-1、组件中所用到的:数据、方法等等,均要配置在setup中。
2、若返回一个对象,则对象中的属性、方法,在模板中均可以直接使用。
若返回一个渲染函数:则可以自定义渲染内容。
5、ref函数
作用: 定义一个响应式的数据
语法: const xxx = ref(initValue)
- 创建一个包含响应式数据的引用对象(reference对象,简称ref对象)。
- JS中操作数据: xxx.value
- 模板中读取数据:不需要.value,直接: {{xxx}}
备注:
- 接收的数据可以是:基本类型、也可以是对象类型。
- 基本类型的数据:响应式依靠的是类上的getter与setter完成的(我们等下看下源码你就知道了)。
- 对象类型的数据:内部 “ 求助 ”了Vue3.0中的一个新函数—— reactive函数。
6、reactive
-作用: 定义一个对象类型的响应式数据(基本类型不要用它,要用ref函数)
- 语法:const 代理对象= reactive(源对象)接收一个对象(或数组),返回一个代理对象(Proxy的实例对象,简称proxy对象)
- reactive定义的响应式数据是“深层次的”。
- 内部基于 ES6 的 Proxy 实现,通过代理对象操作源对象内部数据进行操作。
7、reactive对比ref
1.从定义数据角度对比
- ref用来定义:基本类型数据。
- reactive用来定义:对象(或数组)类型数据。
- 备注:ref也可以用来定义对象(或数组)类型数据, 它内部会自动通过reactive转为代理对象。
2.从原理角度对比
-ref通过类中的的getter与setter来实现响应式(数据劫持)。
- reactive通过使用Proxy来实现响应式(数据劫持), 并通过Reflect操作源对象内部的数据。
3.从使用角度对比
- ref定义的数据:操作数据需要.value,读取数据时模板中直接读取不需要.value。
- reactive定义的数据:操作数据与读取数据:均不需要.value。
4.从使用角度对比
8、toRefs
-作用:创建一个ref对象,其value值指向另一个对象中的某个属性。
- 语法:const name = toRef(person,‘name’)
- 应用: 要将响应式对象中的某个属性单独提供给外部使用时。
- 扩展:toRefs与toRef功能一致,但可以批量创建多个 ref 对象,语法:toRefs(person)
9、computed
10、watch
watch()函数用来监视某些数据项的变化,从而触发某些特定的操作,使用之前需要按需导入:
注意:
1、监视reactive定义的响应式数据时:oldValue无法正确获取、强制开启了深度监视(deep配置失效)。
2、监视reactive定义的响应式数据中某个属性时:deep配置有效。
11、watchEffect函数【用到哪个、监视哪个】
1.watch的套路是:既要指明监视的属性,也要指明监视的回调。
2.watchEffect的套路是:不用指明监视哪个属性,监视的回调中用到哪个属性,那就监视哪个属性。
watchEffect有点像computed:
- 1、但computed注重的计算出来的值(回调函数的返回值),所以必须要写返回值。
- 2、而watchEffect更注重的是过程(回调函数的函数体),所以不用写返回值。
12、API
Vue3.0也提供了 Composition API 形式的生命周期钩子,与Vue2.x中钩子对应关系如下:
13、自定义 hook函数【重点】
- 什么是hook?—— 本质是一个函数,把setup函数中使用的Composition API进行了封装。
- 类似于vue2.x中的混合机制mixin。
- 自定义hook的优势: 复用代码, 让setup中的逻辑更清楚易懂。
1、创建一个hooks文件夹,里面创建文件usePoint.js
2、在组件中使用
14、其它 Composition API
1.shallowReactive 与 shallowRef
2.readonly 与 shallowReadonly
3.toRaw 与 markRaw
4.customRef
- 作用: 创建一个自定义的 ref,并对其依赖项跟踪和更新触发进行显式控制。
- 实现防抖效果
15、Provide&inject
1、provide
provide: 向子组件以及子孙组件传递数据。接收两个参数,第一个参数是key.即数据的名称;第二个参数为value,即数据的值
2、inject
inject: 接收父组件或祖先组件传递过来的数据。接收一个参数key,即父组件或祖先组件传递的数据名称
16、响应式数据的判断
1.isRef: 检查一个值是否为一个ref对象
2.isReactive: 检查一个对象是否是由 reactive创建的响应式代理
3.isReadonly: 检查一个对象是否是由readonly创建的只读代理
4.isProxy:检查一个对象是否是由 reactive 或者 readonly 方法创建的代理
17、新的组件
1.Fragment
- 在Vue2中: 组件必须有一个根标签
- 在Vue3中: 组件可以没有根标签, 内部会将多个标签包含在一个Fragment虚拟元素中
- 好处: 减少标签层级, 减小内存占用
2.Teleport
什么是Teleport?—— Teleport 是一种能够将我们的组件html结构移动到指定位置的技术。
3.Suspense
等待异步组件时渲染一些额外内容,让应用有更好的用户体验。
18、vue3.x中集成typescript
1.为什么要使用ts
2.vue-cli(脚手架)安装ts
3.vite安装ts
4.定义组件
5.案例代码
18、组合式API结合vue-router
- 引入setup和Vue的组合式API,开辟了新的可能性,但要充分发挥Vue Router的潜力,我们需要使用一些新的函数来代替访问this和组件内导航守卫。
- 因为我们在setup里面没有访问this,所以我们不能在直接访问this.route。作为替代,我们使用useRouter和useRoute函数。
19、组合式API结合vuex
如果在使用Vue 中的 组合式API进行编写组件,就不能延续之前的写法(如: this.s t o r e ) 。 由 于 我 们 无 权 访 问 s e t u p 的 内 部 t h i s , 因 此 要 在 s e t u p 中 使 用 s t o r e , 可 以 调 用 该 u s e S t o r e 函 数 。 这 等 效 t h i s . store)。由于我们无权访问setup的内部this,因此要在setup中使用store,可以调用该useStore函数。这等效this.store)。由于我们无权访问setup的内部this,因此要在setup中使用store,可以调用该useStore函数。这等效this.store于使用Option API在组件内进行检索。
setup中访问vuex
20、resolve alias 别名定义
将会被传递到 @rollup/plugin-alias 作为它的 entries。也可以是一个对象,或一个 { find,replacement } 的数组.
当使用文件系统路径的别名时,请始终使用绝对路径。相对路径作别名值将按原样使用导致不会解析到文件系统路径中。
或者 数组的形式