vue3.0 学习笔记

2023-05-16

vue3学习笔记

  • vue3.0六大亮点
  • vue3.0 如何变快的?

vue3.0六大亮点

  • performance:性能比vue2.0快1.2-2倍
  • tree shaking support:按需编译,体积比2.0更小
  • composition API:组合API(类似React Hokks)
  • better typescript support:更好的ts支持
  • custom renderer API:暴露了自定义渲染API
  • fragment,teleport(protal)suspense:更先进的组建

vue3.0 如何变快的?

  • diff方法优化:

     + vue2中的虚拟dom是进行全量的对比(不管dom有没有发生变化,都要进行对比)
     + vue3新增了静态标记(patchFlag)
     	在与上次虚拟节点进行对比时,只对比带有patch flag的节点
     	并且可以通过flag的信息得知当前节点要对比的具体内容
    

在这里插入图片描述

  • hositStatic 静态提升:

     + vue2 中无论元素是否参与更新,每次都会重新创建,并重新渲染。
     + vue3 中对对于不参与更新的元素,会做静态提升,只会被创建一次,在渲染时直接复用即可。
    
<div>
	<p>我是仙女🧚‍♀️</p>
	<p>我是仙女🧚‍♀️</p>
	<p>我是仙女🧚‍♀️</p>
	<p>我是仙女🧚‍♀️!!!!!!</p>
</div>
// 静态提升前:
export function render(_ctx, _cache, $props, $setup, $data, $options) {
	return (_openBlock(), _createBlock("div", null, [
		_createVNode("p", null, "我是仙女🧚‍♀️"),
		_createVNode("p", null, "我是仙女🧚‍♀️"),
		_createVNode("p", null, "我是仙女🧚‍♀️"),
		_createVNode("p", null, _toDisplayString(_ctx.msg) + "}", 1 /* TEXT */),
	]))
// 静态提升后:
const _hoisted_1 = /*#__PURE__#*/_creareVNode("p", null, "我是仙女🧚‍♀️", -1 /* HOISTED */)
const _hoisted_2 = /*#__PURE__#*/_creareVNode("p", null, "我是仙女🧚‍♀️", -1 /* HOISTED */)
const _hoisted_3 = /*#__PURE__#*/_creareVNode("p", null, "我是仙女🧚‍♀️", -1 /* HOISTED */)
}

export function render(_ctx, _cache, $props, $setup, $data, $options) {
	return (_openBlock(), _createBlock("div", null, [
		_hoisted_1,
		_hoisted_2,
		_hoisted_3,
		_createVNode("p", null, _toDisplayString(_ctx.msg) + "}", 1 /* TEXT */)
	]))
}
  1. cacheHandlers 事件侦听器缓存

    默认情况下onClick会被视为动态绑定,所以每次都会去追踪它的变化
    但是因为是同一个函数,所以没有追踪到变化,因此直接缓存起来复用即可
    在这里插入图片描述

  2. ssr缓存

    + 当有大量静态内容的时候,这些内容会被当作纯字符串推进一个buffer里面,
    即使存在动态的绑定,会通过模版插入值嵌入进去。这样会比通过虚拟dom来渲染的快上很多很多。
    + 当静态内容大到一定量级的时候,会用_createStaticVNode方法在客户端去生成一个static node,这些静态node,会被直接innerHTML,就不需要创建对象,然后依据对象渲染
    
  • setup

     1、setup执行时机:
     	setup
     	beforeCreate:表示组件刚刚被创建出来,组件的data和methods还没有初始化好。
     	created:表示组件刚刚被创建出来,并且组件的data和methods已经初始化好了。	
     2、setup注意点:
     	- 由于在执行setup函数时,还没有执行created函数生命周期方法
     	  所以在setup函数中,是无法使用data和methods的
     	- 由于我们不能在setup函数中使用data和methods,
     	  所以vue为了避免我们错误的使用,它直接将setup函数中的this改成了undefined
     	- setup只能是同步的,不能是异步的。
    
  • reactive

    1、什么是reactive
        - reactive是vue3中提供的实现响应式数据的方法。
        - 在vue2中响应式数据是通过defineProroperty来实现的。
          而在vue3中是响应式数据是通过ES6的Proxy来实现的。 
    2、reactive注意点:
    	- reactive的参数必须是对象(arr/json)
    	- 如果给reactive传递其他对象
    		+ 默认情况下修改对象,界面不对自动更新
    		+ 如果想要更新,可以通过重新赋值的方式
    
  • ref

      1、什么是ref
      	- ref和reactive一样,也是用来实现响应式数据的方法。
      	- 由于reactive必须传递一个对象,所以导致在企业开发中
      	  如果我们只想让某个变量实现响应式的时候会非常麻烦
      	  所以vue3给我们提供了ref,实现对简单值的监听
      2、ref本质
      	- ref底层的本质其实还是reactive
      	- 系统会根据我们给ref传入的值自动将他转换成
      	  ref(xx) -> reactive({ value: xx })
      3、注意点:
      	- 在vue中使用ref的值不用通过value来获取
      	- 在js中使用ref的值必须通过value来获取
    
  • ref和reactive的区别

      - 如果在template中使用的是ref类型的数据,vue会自动帮我们添加.value
      - 如果在template中使用的是reactive类型的数据,vue不会自动帮我们添加.value
      
      - vue是如何决定是否需要自动添加.value类型的
      	+ vue在解析数据之前,会判断这个数据是不是ref类型的,
      	+ 如果是,就自动添加.value
      - vue是如何判断当前的数据类型是否是ref类型的
      	+ 通过当前数据的_ _v_ref来判断的
      	+ 如果有这个私有属性,并且取值为true,那么就代表此数据是一个ref类型的数据。
    
  • 递归监听

    1、默认情况下,无论是通过ref还是reactive都是递归监听
    2、递归监听存在的问题
    	- 如果数据量比较大,非常消耗性能
    
  • 非递归监听(shallowRef shallowReactive)

    - 如何出发非递归监听属性更新界面?
    	如果是shallowRef,使用triggerRef来出发
    - 应用场景
    	一般情况下,我们使用ref和reactive即可
    	只有在需要监听的数据量比较大的时候,我们才使用shallowRef和shallowReactive
    
  • toRaw

    - 从reactive或则 ref中得到原始数据
    - toRwo的作用:
    	做一些不想被监听的事情(性能提升)
    - ref和reactive数据类型的特点:
    	每次修改都会被追踪,都会更新UI界面,但这样其实是非常消耗性能的
    	所以如果我们有一些操作不需要追踪,不需要更新UI界面,那么这个时候
    	我们就可以通过toRaw方法拿到它的原始数据,对原始数据进行修改
    	这样就不会被追踪,不会更新UI界面,性能也就更好了
    
import { reactive,  toRaw} from 'vue'
setup() {
	let obj = { name: 'zs', age: 18 }
	let state = reactive(obj)
	let obj2 = toRaw(state)
	console.log(state === obj) // false
	console.log(obj2 === obj) // true
}
import { ref,  toRaw} from 'vue'
setup() {
	let obj = { name: 'zs', age: 18 }
	let state = ref(obj)
	let obj2 = toRaw(state.value)
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

vue3.0 学习笔记 的相关文章

  • 自动跳过bilibili充电鸣谢(油猴脚本)

    脚本地址 xff1a 点击访问
  • ubuntu16.04下安装Python3.6

    今天在配置ubuntu下的pytorch环境 xff0c 由于ubuntu本身自带的是python2 7和python3 5 xff0c 想下载一个python3 6 xff0c 并在virtualenv中装pytorch xff0c 中间
  • 利用zabbix自带模板监控网络设备及配置邮件告警

    网络设备配置snmp xff0c 这里我们用H3C设备举例 xff0c 持续关注后续会更新如何创建自定义监控项 这里我们用Tempate Moudule Interfaces SNMP做示例 xff0c 这个模板包括接口的状态 出入方向带宽
  • ffmpeg av_read_frame返回AVERROR_EOF

    最近在调试的时候总是发现av read frame 返回AVERROR EOF xff0c 但是我这是网络传输rtsp xff0c 怎么会是文件结尾呢 xff0c 网络上搜了一下没结果 xff0c 只能自己看源码了 xff0c 结果发现在t
  • windows10远程登陆切换用户

    在windows10下部署IIS网站时 xff0c 利用Administrator部署过程中总是出现各种问题 xff0c 因此选择用普通账户进行部署 xff0c 由于电脑只能远程登陆 xff0c 这里记录一下 xff0c 作为以后的参考 打
  • 教你如何用Dockerfile自定义构建一个Nodejs环境Docker镜像

    教你如何用Dockerfile自定义构建一个Nodejs环境Docker镜像 注意 xff1a 请先安装Docker工具 废话少说 xff0c 直接上Dockerfile 使用Python3基础镜像 FROM python 3 10 alp
  • Centos7安装mongoDB详细过程

    添加MongoDB的YUM仓库 在终端中执行以下命令 xff0c 添加MongoDB的YUM仓库 xff1a sudo vi etc yum repos d mongodb org 4 4 repo 在打开的文件中 xff0c 输入以下内容
  • python:性能优化(一)

    python性能优化 01 在列表里面计数 性能 xff1a 第二种计数方法比第一种快不要太多 xff0c 因为Python原生的内置函数都是优化过的 xff0c 所以能用原生的计算的时候 xff0c 尽量用原生的函数来计算 xff0c 所
  • 这20个Pandas函数一定要牢记,建议收藏!!

    来自 xff1a Deephub IMBA Pandas 是数据科学社区中使用最广泛的库之一 xff0c 它是一个强大的工具 xff0c 可以进行数据操作 清理和分析 本文将提供最常用的 Pandas 函数以及如何实际使用它们的样例 我们将
  • multipart/form-data方式上传text以及文件,类似微博发照片

    actionUrl 地址 params text参数以及值 files 文件参数以及文件 username 认证用户名 passwd 认证密码 public static String postFile String actionUrl M
  • UOS Deepin Linux 系统引导丢失修复

    本篇文章讲解通俗易懂 xff0c 以全新的方式修复引导 xff0c 但第一次使用可能会比较麻烦 xff0c 适用于Linux小白用户 也适合别的方法看不懂 不会操作 操作无效等情况 xff08 就是那种操作没有一点问题 xff0c 但就是搞
  • 机会总是留给有准备的人

    qqq
  • chrome---分析js、css脚本的使用率

    打开开发者工具 gt 点击三个点 xff08 选More tools xff09 gt 选中coverage gt 点击reload gt 双击脚本 xff08 进去可以看到脚本哪些内容被用到 xff0c 哪些没有被用到 xff09
  • 【Java生产者消费者问题总结】

    java生产者消费者问题总结 1 wait notify方法实现 public class Test private static Integer count 61 0 private final Integer FULL 61 5 定义生
  • Spring知识点总结 Spring基础到深入(持续更新)

    1 概述 Spring是一个开源框架 Spring为简化企业级开发而生 xff0c 使用Spring xff0c JavaBean就可以实现很多以前要靠EJB才能实现的功能 同样的功能 xff0c 在EJB中要通过繁琐的配置和复杂的代码才能
  • L1-020 帅到没朋友 (20分)

    当芸芸众生忙着在朋友圈中发照片的时候 xff0c 总有一些人因为太帅而没有朋友 本题就要求你找出那些帅到没有朋友的人 输入格式 xff1a 输入第一行给出一个正整数N xff08 100 xff09 xff0c 是已知朋友圈的个数 xff1
  • L1-002 打印沙漏 (20分)

    注意 xff1a 不用输出符号后面的空格 AC代码 xff1a include lt iostream gt using namespace std int main int n int sum 61 1 int i 61 1 该行的个数
  • Java 后缀表达式求值

    PositifixExpression类 import java util Stack 后缀表达式求值 public class PostfixExpression extends Thread public static void mai
  • c++-----vector开辟空间

    include lt bits stdc 43 43 h gt using namespace std int main int n 61 3 vector lt int gt c for int i 61 0 i lt n i 43 43
  • c++---string遇到空格读取结束问题

    string类基本的输入函数有如下几个 xff1a 1 xff09 istream amp operator gt gt istream amp string amp 2 xff09 istream amp getline istream

随机推荐