Vue3学习笔记

Posted dahei

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Vue3学习笔记相关的知识,希望对你有一定的参考价值。

 

 

 

对外暴露属性(defineExpose)

<script setup> 的组件默认不会对外部暴露任何内部声明的属性。 如果有部分属性要暴露出去,可以使用 defineExpose

    

 

 

<script setup>   

语法糖并不是新增的功能模块,它只是简化了以往的组合API(compositionApi)的必须返回(return)的写法,并且有更好的运行时性能。

注:因为setup语法糖是vue3.2正式确定下来的议案,所以vue3.2的版本是真正适合setup语法糖的版本。

在 script setup 中,引入的组件可以直接使用,无需再通过components进行注册,并且无法指定当前组件的名字,它会自动以文件名为主,也就是不用再写name属性了

 

setup 函数

由于在执行setup函数的时候,还没有执行created生命周期方法,所以在setup函数中,是无法使用data和methods

setup函数只能是同步的不能是异步的

 

reative

reactive是vue3中提供的实现响应式数据的方法, 通过ES6的proxy来实现的

reative参数必须是对象(json/array)

如果给reactive传递了其他对象, 默认情况下修改对象,界面不会自动更新, 如果想更新,可以通过重新赋值的方式

 

ref

ref和reactive一样,也是用来实现响应式数据的方法. 实现对简单值的监听

ref底层的本质其实还是reactive,系统会自动根据我们给ref传入的值将它转换成ref(xx) -> reactive(value:xx)

在vue(template)中使用ref的值不用通过value获取

在TS中使用ref的值必须通过value获取

 

在组合API中使用生命周期函数,直接从vue中引入

import onMounted from Vue

 

vue3响应式数据本质 

在Vue2.x中通过defineProperty来实现响应式数据的

在Vue3.x中是通过Proxy来实现响应式数据的

 

provide 与 inject

 

 作用: 实现祖与后代组件间通信

用法: 父组件有一个provide选项来提供数据,后代组件有一个inject选项来开始使用这些数据.

具体写法:  

 

Vue3中watch函数和watchEffect函数的对比

watch函数的套路是: 既要知名要检视那个属性,也要指明检视的回调.

watchEffect函数的套路是: 不用指明要检视哪个属性,回调中用到了哪个属性,那就检视哪个属性.

watchEffect函数和computed函数有点像:

  computed函数注重: 计算出来的值 [PS: 回调函数的返回值], 所以必须写返回值.

  watchEffect函数注重: 过程 [回调函数的函数体], 所以不用写返回值.

 

reactive() 和 ref() 对比

参考: https://www.cnblogs.com/xiegongzi/p/15875530.html

 

Proxy数据检视原理

Vue2中数据检视如果是对象类型的,通过Object.defineProperty()的getter和setter来做到数据监视的;

  Vue2中监视数据的弊端:

  新增属性,删除属性,界面不会更新.

  直接通过下边修改数据.界面不会更新.

Vue3中就不会出现上面的情况.

 

Proxy官方链接: https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Proxy

Reflect官方链接: https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Reflect

 

相比Vue2

打包大小减少41%

初次渲染快55%,更新渲染快133%

内存减少54%

使用Proxy代替defineProperty实现数据响应式

重写虚拟DOM的实现和Tree-Shaking

 

创建Vue3项目(通过Vite来创建)

node版本:  14.16.3      npm版本:  6.14.13

npm create vite@latest vue3-demo --template vue

npm install

npm run dev

 

vue3中ref使用

参考: https://blog.csdn.net/weixin_47886687/article/details/112919563

 

keep-alive

<!-- 失活的组件将会被缓存!-->

<keep-alive>

  <component :is="currentTabComponent"></component>

</keep-alive>

 

Provide / Inject

使用一对provide和inject,无论组件层次有多深,父组件都可以作为其所有子组件的依赖提供者.

 

Props验证

 

v-for 与 v-if 一同使用

可以把 v-for 移动到 <template> 标签中来修正

<template v-for="todo in todos" :key="todo.name">

  <li v-if="!todo.isComplete">

     todo.name

  </li>

</template>

 

生命周期

beforeCreate

created

beforeMount

mounted

beforeUpdate

updated

beforeUnmount

unmounted

 

防抖和节流

详见:  https://v3.cn.vuejs.org/guide/data-methods.html#%E6%96%B9%E6%B3%95

防抖:触发高频事件后n秒内函数只会执行一次,如果n秒内高频事件再次被触发,则重新计算时间.
使用场景:频繁触发、输入框搜索.
因为防抖的特性,一直执行最后一次的触发,所以可以用于鼠标移动确定最后一次移动的时候的坐标位置.

节流:高频事件触发,但在n秒内只会执行一次,所以节流会稀释函数的执行频率.
使用场景:频繁触发、onrize,onscroll滚动条.
因为节流是监听到第一次触发事件后就执行,所以可以用来防止按钮多次点击执行多次,且按照第一次点击的事件为准.

 

通过脚手架Vite创建项目:

npm init vite@latest my-vue-app --template vue

以上是关于Vue3学习笔记的主要内容,如果未能解决你的问题,请参考以下文章

Vue3 学习总结笔记 (十四)

Vue3 学习总结笔记 (十三)

Vue3 学习总结笔记 (十三)

vue3视频学习笔记

vue3学习笔记

Vue3学习笔记