《看完它面试必solo | 寻找C站宝藏》

今天给大家搂点干货,2020 年 9 月 18 日晚 11 点半发布了 Vue 3.0 版本。到目前已经很多公司开始鼓励大家去学习Vue3了,在这里小编就把自己所了解到的‘皮毛’贡献给大家

Vue3.0 的突出亮点

  • Performance:性能比Vue2快1.2~2倍
  • Tree shaking support:按需编译。体积比Vue2更小
  • Composition API:组合API(类似React Hooks)
  • Better TyprScript support:更好的Ts支持
  • Custom Renderer API:暴露了自定义渲染API
  • Fragment,Teleport(protal),Supense:更先进的组件
Vue3.0 是如何变快的
  • diff 方法优化

    	//通过下面这段代码 我们对比Vue2和Vue3的渲染<div><span>姓名:</span> <a>{{data.name}}</a></div>
    

    1.Vue2 中的虚拟dom是进行全量对比的
    在这里插入图片描述
    2.Vue3新增了静态编辑(PathFlag)在与上次须弥节点对比的时候,只对比带有pathFlag的节点,并且可以通过flag的信息得知当前要对比的具体内容
    在这里插入图片描述
    pathFlags的常见参数
    在这里插入图片描述

  • hoistStatic 静态提升

    1.Vue2中无论元素是否参与更新 每次都会重新创建 然后在渲染
    在这里插入图片描述 2.Vue3中对于不参与更新的元素 会做静态提升 只会被创建一次 在渲染时直接复用即可
    在这里插入图片描述

  • cacheHandlers 事件侦听的缓存

    默认情况下onClick会被视为动态绑定 所以每次都会去追踪他的变化
    在这里插入图片描述因为是同一个函数 所以没有追踪变化 直接缓存起来复用即可 我们看到下面的的代码中就没有静态标识 说明我们无需对比
    在这里插入图片描述

  • ssr 渲染

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

Vue3的组合API

在Vue2中我们的如果想实现一个功能首先我们要去data中去定义功能所需要的数据,然后我们要在methods或者computed或者watch中编写我们要实现功能的逻辑,每一个功能都是要重复上面的数据跟业务逻辑进行分离的编写,不利于我们的编写和维护,下面Vue3中就解决了这个问题

  • Vue3中提供了组合API——setup setup函数是组合API的入口文件
  1. 入口函数中定义变量
    在这里插入图片描述
    首先我们在setup函数中去声明变量
    声明的变量要想被监听 我们需要引入ref进行使用
    我们想要在页面中进行渲染 还需要将变量暴露出去后在模板中才会生效

  2. 入口文件中编写事件函数
    在这里插入图片描述
    在模板中注册事件后,直接在组合API中去编写方法就可以了

  3. 组合API中reactive的使用
    在这里插入图片描述
    在前面我们了解到如果想要监听到组合API中的数据的变化需要用到ref,但是ref只能监听到简单数据类型的变化,如果想要监听复杂类型的变化我们就要用到resctive

  4. 组合API的抽离
    在这里插入图片描述
    我们可以看到上面的将用户的一些操作全部放到了 useRemoveStudent 方法中,在方法中进行暴露,我们在组合API中直接引入然后暴露就可以使用,进而解决了Vue2中的业务逻辑和数据分离的痛处,上面我们说可以将数据和逻辑放到方法中 我们也可以像下面这样放到模块中进行导入
    在这里插入图片描述

  • Composition API的本质
    我们可以将Composition API翻译成 混合/注入API,其实就是将我们的Composition API中return 暴露出来的内容对 optionApi进行注入 注入到我们的data和methods中,在实际的开发中Composition API和Option API是可以联合使用的

  • setup的执行时机
    beforeCreate:组件刚刚被创建出来,组件中的data和methods还没有初始化好
    setup
    created:组件被创建出来,且组件中的data和methods已经初始化好了

  • setup函数使用的注意点
    因为他的执行顺序是在beforeCreate和created函数之间,所以在setup函数中是无法使用data和methods
    因为我们在setup函数中不能使用data和methods,所以Vue中为了避免我们错误的使用,Vue3中直接将setup函数中的this修改成了undefined
    setup函数中只能是同步的 不能是异步

  • 什么是reactive
    reactive是Vue3中提供的实现响应式数据的方法,在Vue2中影响是数据是通过defineProperty来实现的,而在Vue3中响应式数据是通过ES6的Proxy来实现的 reactive本质:就是将传入的数据包装成一个Proxy对象

  • reactive注意点
    reactive参数必须是对象(json/arr)-如果给reactive传递了其它对象
    默认情况下修改对象,界面不会自动更新+如果想更新,可以通过重新赋值的方式
    在这里插入图片描述

Vue的双向数据绑定

  • Vue2 通过 Object.defineProperty 将对象属性转化为 getter/setter , 该属性是 ES5 中无法被 shim 的特性,也是 vue 不支持 IE8 及以下版本浏览器的原因
    在 vue 中, Object.defineProperty 无法监控到数据的下标变化,导致直接通过数组下标给数组设置新值时,无法做到实时响应。目前 vue 只针对数组的变异方法 push/pop/shift/unshift/splice/sort/reverse 做了 hack 处理,存在响应局限
    在这里插入图片描述
  • Vue3 则采用Proxy
    -Proxy 是 ES6 中新增的一个特性,翻译过来意思是"代理",用在这里表示由它来“代理”某些操作。 Proxy 让我们能够以简洁易懂的方式控制外部对对象的访问。其功能非常类似于设计模式中的代理模式。
    -Proxy 可以理解成,在目标对象之前架设一层“拦截”,外界对该对象的访问,都必须先通过这层拦截,因此提供了一种机制,可以对外界的访问进行过滤和改写。
    -使用 Proxy 的核心优点是可以交由它来处理一些非核心逻辑(如:读取或设置对象的某些属性前记录日志;设置对象的某些属性值前,需要验证;某些属性的访问控制等)。 从而可以让对象只需关注于核心逻辑,达到关注点分离,降低对象复杂度等目的。

Vue3对ts的支持

vue2 最初是使用纯 ES(Javascript) 写成的,而没有引入类型检查系统。类型检查能有效减少重构过程中引入错误的机会,虽然后续采用了 Facebook 的 Flow type checker , 但没有明显的改观,相比较 TypeScript 与 Visual Studio Code 集成开发工具的深度集成,Flow type checker对集成开发环境的支持也不理想。切换到 TypeScript 将允许我们自动生成声明文件,从而减轻维护负担

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/248684.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

KVC/KVO 本质

KVO 的实现原理 KVO是关于runtime机制实现的当某个类的对象属性第一次被观察时&#xff0c;系统就会在运行期动态地创建该类的一个派生类&#xff0c;在这个派生类中重写基类中任何被观察属性的setter方法。派生类在被重写的setter方法内实现真正的通知机制如果原类为Person&am…

攻破 程序员35岁 “瓶颈” 那都不是事!

我正在参与CSDN《新程序员》有奖征文&#xff0c;点击和我一起参与吧 下面呢&#xff0c;我就在这里给大家讲述一下我的经历吧。 初衷 作为程序猿的我们&#xff0c;初衷在哪里&#xff0c;高薪&#xff1f;体面&#xff1f;热爱&#xff1f;曾经有一个同学聊天中说到这个话…

Vue项目中引用‘阿里巴巴字体图标库iconfont’

1.前言 在实际开发中&#xff0c;作为前端开发人员的我们经常会遇到下面这种ui图 我们看到在上面两个平台设计图中的出现了大量的图标&#xff0c;在某种情况下&#xff0c;这种图标是需要我们自己去找的&#xff0c;不要喷我们的 ui 哈&#xff0c;主要是我喜欢麻烦 哈哈&…

项目流程

转载于:https://www.cnblogs.com/Koma-vv/p/10243286.html

最详细的讲解 JS 原型与原型链

文章目录一. 普通对象与函数对象二. 构造函数三. 原型对象四. proto五. 构造器六. 原型链七. Prototype总结一. 普通对象与函数对象 JavaScript 中&#xff0c;万物皆对象&#xff01;但对象也是有区别的。分为普通对象和函数对象&#xff0c;Object 、Function 是 JS 自带的函…

jmeter分布式压测原理简介1

1、什么叫分布式压测&#xff1f; 分布式压测&#xff1a;模拟多台机器向目标机器产生压力&#xff0c;模拟几万用户并发访问 2、分布式压测原理&#xff1a;如下 3、更多补充.....待添加 转载于:https://www.cnblogs.com/yoyoblogs/p/11071774.html

十三 re模块

一&#xff1a;什么是正则&#xff1f; 正则就是用一些具有特殊含义的符号组合到一起&#xff08;称为正则表达式&#xff09;来描述字符或者字符串的方法。或者说&#xff1a;正则就是用来描述一类事物的规则。&#xff08;在Python中&#xff09;它内嵌在Python中&#xff0c…

带你玩转 ui 框架 ——scoped及样式穿透问题详解

前言 在我们前端的开发中经常会使用到各种 ui 框架 下面这两个是比较火的&#xff0c;也是我常用的两个ui框架。 问题描述 但是在使用框架的时候难免会遇到需要改变组件中的一些样式&#xff0c;当然如果我们所有页面的组件样式都是统一的话&#xff0c;我们可以进行全局设置…

三分钟带你掌握 CSS3 的新属性

文章目录1. css3简介2. css3边框2.1 边框圆角2.2 边框阴影3. css3背景3.1背景图大小3.2背景图起始点4. css3文本效果4.1 文本阴影4.2 文本换行5. css3字体图标6. css32D转换7. css3 3D转换8. css3 transition8.1 单项改变8.2 单项改多项改变9. css3 动画1. css3简介 CSS 用于控…

用 div 仿写 input 和 textarea 功能

div仿写input和textarea input不能换行&#xff0c;textarea也不能跟随内容多少而增加高度。 contenteditable true; <div class"msg_content" contenteditable"true" placeholder在这里输入您的留言或建议></div> .msg_content {box-sizing:…

Vue项目中如何设置动态的TDK

TDK是什么 TDK就是网站的标题&#xff08;title&#xff09;、描述&#xff08;description&#xff09;和关键词&#xff08;keyword&#xff09; TDK在哪里 上面大佬对TDK的概念解释的很全面&#xff0c;但是在网页中的TDK在哪里呢&#xff0c;作为开发人员打开F12我们就…

PHP从零开始--基础篇

一、 变量 1.1概念 变量是存储数据的用的容器。 1.2定义变量 变量名的语法规则&#xff1a; 可以是数字、字母、下划线&#xff0c;但是不能以数字开头不能出现空格变量名是区分大小写变量名不能是系统中的关键字行业约定的语法规范 驼峰命名法 比如 myname 定义成 myNam…

PHP从零开始--循环数组

一、循环 1.1单层for循环 1.1.1基础语法 for(初识变量;结束范围;累加/累减){ 重复执行的代码 } 1、 先初识化变量$i 2、 $i<100表达式进行判断 3、 跳入循环&#xff0c;执行重复代码 4、 累加或者累加 5、 再进行$i<100表达式判断 6、 再跳入循环&#xff0c;执行重复…

Spring Cloud(F版)搭建高可用服务注册中心

上一篇文章【Spring Cloud搭建注册中心】成功搭建了一个Eureka Server服务注册中心&#xff0c;不过相信细心的朋友都会发现&#xff0c;这个服务注册中心是一个单节点服务注册中心&#xff0c;万一发生故障或者服务器宕机&#xff0c;那所有的服务可就不能使用了&#xff0c;这…

Python(60)_闭包

1 、闭包的概念 #-*-coding:utf-8-*- 1、闭包&#xff1a;内部函数调用外部函数的变量def outer():a 1def inner():print(a)print(inner.__closure__) outer() print(outer.__closure__) 2 闭包的使用 #-*-coding:utf-8-*- 1、闭包&#xff1a;内部函数调用外部函数的变量 …

PHP从零开始--错误处理函数

一、错误处理 1.1错误种类 1.1.1Notices 比如没有定义变量确使用了会报notice错误&#xff0c;只是提醒注意&#xff0c;不影响后续代码执行 1.1.2Warnings 这是警告错误&#xff0c;比如include引入一个并不存在的文件&#xff0c;不影响后续代码执行 1.1.3Fatal Erro…

第四单元博客总结——暨OO课程总结

第四单元博客总结——暨OO课程总结 第四单元架构设计 第一次UML作业 简单陈述 第一次作业较为简单&#xff0c;只需要实现查询功能&#xff0c;并在查询的同时考虑到性能问题&#xff0c;即我简单的将每一次查询的结果以及递归的上层结果都存储下来&#xff0c;使用一个Boolean…

PHP从零开始--数据库

文章目录一、 数据库简介1.1概念1.2命令行操作1.3连接数据库1.4配置环境变量二、 数据库的相关操作2.1显示所有仓库2.2创建仓库2.3删除仓库2.4切换仓库三、 数据表的相关操作3.1概念3.2显示所有的数据表3.3创建数据表3.2修改字段名3.3查看表结构3.4添加字段3.5删除字段3.6更改数…

如何下载js类库

https://bower.io/ 这个已经淘汰 https://learn.jquery.com/jquery-ui/environments/bower/ Web sites are made of lots of things — frameworks, libraries, assets, and utilities. Bower manages all these things for you. Keeping track of all these packages and mak…

PHP从零开始--字段修饰符数据操作SQL语言

文章目录一、 字段修饰符1.1主键1.2自动增长1.3非空1.4默认值1.5外键二、 对数据的操作2.1增加数据2.2删除数据2.3更新数据2.4查询数据2.4.1查询所有的数据2.4.2查询指定字段2.4.3去除重复字段2.4.4where表达式详解2.4.5分组查询2.4.6排序三、 SQL语言3.1DML3.2DDL3.3DCL一、 字…