vue3的新特性及api

news/2024/7/15 17:22:32 标签: javascript, 前端, react.js

前言:

最近在学vue源码,vue已经到vue3(beat)版本(目前官方建议不在生产环境使用),说实话vue2和vue3的有了质的飞跃(主要是性能上)。想对vue3有更好的了解我强烈推荐看看尤大的介绍视频(vu3尤大介绍视频)。这篇文章就是我看过之后自己的心德与理解总结。

一、vue3的新特性及新增api

1.响应式原理

vue2的响应式原理是利用Object.defineProperty而vue3则是利用Proxy。Proxy的性能和功能比Object.defineProperty强很多(这里的强是指api支持更好源码层次)。可以看一下这边文章Proxy 与Object.defineProperty介绍与对比(vue源码运用)传送门。就能更好的了解变化。

2.新增了组件 API(Composition API)

vue2使用的是options API而3新增了Composition API(注意是新增,也就是说这两个可以共用,甚至可以互相嵌套使用兼容性很好

Vue Composition API(英文版本)。可切换语言

 3.片段-碎片(Fragments)

这个类似于react  Fragments组件(react Fragment官方文档)。其实就是vue2的时候每个组件必须要有根组件,而vue3就可以不必这样(减少不必要的dom元素)。

4.Suspense

将被用在 Vue 3 中的另一个从 React 学来的功能是 Suspense 组件。Suspense 能够暂停你的组件渲染,并渲染后备组件,直到条件满足为止。react Suspens官方文档(我的理解:当在加载异步组件的时候,等待所有组件加载完毕之前可以做一些事情类似于promise.all())。举个例子比如父组件请求接口需要3秒请求过来,而子组件是用来显示请求结果的这就是典型的异步组件。这个时候我们就可以用Suspense,实现在等待的时候展现一个组件(就比如移动端页面加载完毕之前都会有骨架,我们·就可以用这个实现)。

5.Portals

其实这个就类似于react的Portals(react Portals官方文档)。

Portals 提供了一种独特的方法来将子级渲染到父组件的 DOM 层次结构之外的 DOM 节点中。”

这种处理模式,是弹出式窗口以及通常显示在页面顶部的组件所使用的一种非常好的方法。通过使用 Portals,你可以确保没有任何主机组件 CSS 规则会影响你要显示的组件,并且可以避免用 z-index 进行的黑客攻击。

6.Custom Renderer API暴露了自定义渲染API(teleport介绍)

7.Tree shaking support:可以将无用模块“剪枝”。

二、vue2和3的变化

1.响应式原理实现发生了变化。

2.新增了一些api

3.性能上发生了很大的变化:

根据尤大大的vue视频来看进行了一下方面的优化

1.diff算法上优化(让dom渲染时间缩小)

2.响应式原理的优化(减少源码量大小)

3.项目包大小的优化(vue3的cli打包后会比vue2小)

4.更好的支持typescript(这个是直接可以使用)

5.Tree shaking support可以将无用模块“剪枝”。(模块按需加载减少包大小)

可以看看官网 里面 写了 vue2到 3 的变化 和移出的 api 

vue2 迁移 到 vue3

综上所述vue3会比vue2快上2到3倍(越大的项目越明显)。而且vue3(可以兼容ie11,应该是需要配置的)和vue2可以完美兼容(尤大大说不必,把项目立即升级vue3)。

尤大大对vue3的介绍视频地址

vue3专题博客这个里面涉及尤大提到的diff算法,响应式原理之类的具体做了哪些优化给出了介绍(我就不班门弄斧了哈哈,毕竟我是个小菜鸟)。

  强烈推荐看看这些博客 :vue3专题

三、vite

Vite,一个基于浏览器原生 ES imports 的开发服务器。利用浏览器去解析 imports,在服务器端按需编译返回,完全跳过了打包这个概念,服务器随起随用。同时不仅有 Vue 文件支持,还搞定了热更新,而且热更新的速度不会随着模块增多而变慢。针对生产环境则可以把同一份代码用 rollup 打包。(我的理解就是不用打包,跳过了这个环节。之前必须使用webpack打包,尤大大做这个的初衷是觉得webpack用不惯,就干脆自己写了一个,我表示大佬就是厉害,不得不佩服)
vite介绍  vite使用及介绍

vite github地址

vite现在还在测试中不建议使用在生产环境。

四、结语

我觉得vue3会是前端发展趋势(正式发布之后会火爆),react有的api功能,vue基本都实现了且性能给方面真的提高了很多。

所以提前了解和学习vue3是有必要的。

本文只是我自己的理解,可能有不对的地方(我只是做个记录)。


http://www.niftyadmin.cn/n/1557649.html

相关文章

[iOS 发布] in-house 发布

企业版证书($299)In-House方式发布指南 转载!!!!!

地表最强面试图谱

前言 当你老了,回顾一生,就会发觉:什么时候出国读书,什么时候决定做第一份职业,何时选定对象而恋爱,什么时候结婚,其实都是命运的巨变。只是当时站在三岔路口,眼见风云千樯&#xff…

js运行机制事件循环与宏任务、微任务(彻底搞懂面试异步问题)

前言: 最近面试总是会问一些js运行机制,事件循环,异步执行的题,所以找了几篇博客做个总结。 1.最典型的js笔试题 console.log(script start);setTimeout(function() {console.log(setTimeout);}, 0);Promise.resolve().then(fu…

[iOS item-services分发] 企业级账户分发-个人练手记录

plist苹果安装包实现 转—– 参考 由于蒲公英网站最近挂了,所以只能自己找云服务器去提供下载 分发需要四个东西 1. ipa包文件 2. plist文件 3. 一个用于提供点击的html 4. 用于存储且提供下载的云服务端 这里着重看下云服务器的https外链 由于打包ipa 以及生成plist文…

谈谈我对服务端渲染的理解(SSR)

1.首先需要知道服务端渲染的定义以及优缺点 服务端渲染的定义:   前端页面都是后端将html拼接好,然后将它返回给前端完整的html文件。浏览器拿到这个html文件之后就可以直接显示了,这就是所谓的服务器端渲染。(vue里&#xff1a…

如何读open jdk native 源码

类的命名与java类的命名是一模一样的方法的命名为JNI的代码风格一般关注下文件头&#xff0c;如果是系统文件&#xff0c;比如 <sys/socket.h>&#xff0c; 是搜不到源码的&#xff0c;否则全局可以搜到对应的命名对于类的定义可以通过 class 类名这种方式搜索。一些特殊…

[iOS 报错]AFNetWorking Get请求中含有中文则报错

报错信息 Assertion failure in -[AFHTTPRequestSerializer requestWithMethod:URLString:parameters:error:],## 截图 问题原因, 是因为肯能在Get请求中拼接的URL中 含有中文导致报错 解决 只要把url处理一下 NSString *url [NSString stringWithFormat:"%%",SH…