• 学习Vue3 第一章


    1.介绍vue

    Vue (读音 /vju/,类似于view) 是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。另一方面,当与现代化的工具链以及各种支持类库结合使用时,Vue 也完全能够为复杂的单页应用提供驱动。

    MVVM(Model-View-ViewModel)架构

    1. 『View』:视图层(UI 用户界面)
    2. 『ViewModel』:业务逻辑层(一切 js 可视为业务逻辑)
    3. 『Model』:数据层(存储数据及对数据的处理如增删改查)

    官方文档地址 介绍 — Vue.js

    新版地址文档快速开始 | Vue.js

    2.回顾vue2 对比 vue3

    我们看如下图

    发现传统的vue2 逻辑比较分散 可读性差 可维护性差

    对比vue3 逻辑分明 可维护性 高

    3.Vue3 新特性介绍

    重写双向绑定

    vue2
    基于Object.defineProperty()实现
    
    vue3 基于Proxy
    proxy与Object.defineProperty(obj, prop, desc)方式相比有以下优势:
    
    //丢掉麻烦的备份数据
    //省去for in 循环
    //可以监听数组变化
    //代码更简化
    //可以监听动态新增的属性;
    //可以监听删除的属性 ;
    //可以监听数组的索引和 length 属性;
    
        let proxyObj = new Proxy(obj,{
            get : function (target,prop) {
                return prop in target ? target[prop] : 0
            },
            set : function (target,prop,value) {
                target[prop] = 888;
            }
        })
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    Vue3 优化Vdom

    在Vue2中,每次更新diff,都是全量对比,Vue3则只对比带有标记的,这样大大减少了非动态内容的对比消耗

    Vue Template Explorer我们可以通过这个网站看到静态标记

    patch flag 优化静态树

    Hello world!
    Hello world!
    Hello world!
    Hello world!
    {{msg}}/span>
    Hello world!
    Hello world! 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    Vue3编译后的Vdom是这个样子的

    export function render(_ctx,_cache,$props,$setup,$data,$options){return (_openBlock(),_createBlock(_Fragment,null,[
    _createvNode( "span", null,"Hello world ! "),
    _createvNode( "span",null,"Hello world! "),
    _createvNode( "span",null,"Hello world! "),
    _createvNode( "span", null,"Hello world! "),
    _createVNode("span", null,_toDisplaystring(_ctx.msg),1/* TEXT */),
    _createvNode( "span", null,"Hello world! "),
    _createvNode( "span", null,"Hello world! ")],64/*STABLE_FRAGMENT */))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    新增了patch flag 标记

    TEXT = 1 // 动态文本节点
    CLASS=1<<1,1 // 2//动态class
    STYLE=1<<2,// 4 //动态style
    PROPS=1<<3,// 8 //动态属性,但不包含类名和样式
    FULLPR0PS=1<<4,// 16 //具有动态key属性,当key改变时,需要进行完整的diff比较。
    HYDRATE_ EVENTS = 1 << 5,// 32 //带有监听事件的节点
    STABLE FRAGMENT = 1 << 6, // 64 //一个不会改变子节点顺序的fragment
    KEYED_ FRAGMENT = 1 << 7, // 128 //带有key属性的fragment 或部分子字节有key
    UNKEYED FRAGMENT = 1<< 8, // 256 //子节点没有key 的fragment
    NEED PATCH = 1 << 9, // 512 //一个节点只会进行非props比较
    DYNAMIC_SLOTS = 1 << 10 // 1024 // 动态slot
    HOISTED = -1 // 静态节点
    BALL = -2
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    我们发现创建动态 dom 元素的时候,Vdom 除了模拟出来了它的基本信息之外,还给它加了一个标记: 1 /* TEXT */

    这个标记就叫做 patch flag(补丁标记)

    patch flag 的强大之处在于,当你的 diff 算法走到 _createBlock 函数的时候,会忽略所有的静态节点,只对有标记的动态节点进行对比,而且在多层的嵌套下依然有效。

    尽管 JavaScript 做 Vdom 的对比已经非常的快,但是 patch flag 的出现还是让 Vue3 的 Vdom 的性能得到了很大的提升,尤其是在针对大组件的时候。

    Vue3Fragment

    vue3 允许我们支持多个根节点

    
    
    • 1
    • 2
    • 3
    • 4

    同时支持render JSX 写法

    render() {
            return (
                <>
                    {this.visable ? (
                        
    {this.obj.name}
    ) : (
    {this.obj.price}
    )} {[1, 2, 3].map((v) => { return
    {v}-----
    ; })} ); },
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    同时新增了Suspense 和 多 v-model 用法

    Vue3Tree shaking

    简单来讲,就是在保持代码运行结果不变的前提下,去除无用的代码

    在Vue2中,无论我们使用什么功能,它们最终都会出现在生产代码中。主要原因是Vue实例在项目中是单例的,捆绑程序无法检测到该对象的哪些属性在代码中被使用到

    而Vue3源码引入tree shaking特性,将全局 API 进行分块。如果你不使用其某些功能,它们将不会包含在你的基础包中

    就是比如你要用watch 就是import {watch} from ‘vue’ 其他的computed 没用到就不会给你打包减少体积

    Vue 3 Composition Api

    Setup 函数式编程 也叫vue Hook

    例如 ref reactive watch computed toRefs toRaws我们会在下几个章节详解

    先自我介绍一下,小编13年上师交大毕业,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在。深知大多数初中级java工程师,想要升技能,往往是需要自己摸索成长或是报班学习,但对于培训机构动则近万元的学费,着实压力不小。自己不成体系的自学效率很低又漫长,而且容易碰到天花板技术停止不前。因此我收集了一份《java开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦

  • 相关阅读:
    文件上传及CSRF+Selfxss
    深入理解右值引用与移动语义
    【解放双手】Auto Lidar2Cam Calibration——相机雷达自动标定
    Gateway断言工厂
    大数据HCIE成神之路之数学(1)——基础数学
    spark小笔记
    Java学习笔记 --- 注解
    LeetCode(力扣)968. 监控二叉树Python
    关于技术人员成长的一些建议
    统信桌面操作系统PXE单机部署
  • 原文地址:https://blog.csdn.net/begefefsef/article/details/126081131