说到重用,Compostion API的方式也比mixin的方式好很多,你可以清楚的看到组件使用的数据和方法来自哪个模块,而mixin进组件的功能,常常会让我们困惑此功能来自哪个mixin。
四、更好的TS支持
vue2不适合使用ts,原因在于vue2的Option API风格。options是个简单对象,而ts是一种类型系统、面向对象的语法。两者有点不匹配。
在vue2结合ts的具体实践中,要用 vue-class-component 强化 vue 组件,让 Script 支持 TypeScript 装饰器,用 vue-property-decorator 来增加更多结合 Vue 特性的装饰器,最终搞的ts的组件写法和js的组件写法差别挺大。
在vue3中,量身打造了defineComponent函数,使组件在ts下,更好的利用参数类型推断 。Composition API 代码风格中,比较有代表性的api就是 ref 和 reactive,也很好的支持了类型声明。
import { defineComponent, ref } from ‘vue’
const Component = defineComponent({
props: {
success: { type: String },
student: {
type: Object as PropType,
required: true
}
},
setup() {
const year = ref(2020)
const month = ref<string | number>(‘9’)
month.value = 9 // OK
const result = year.value.split(‘’) // => Property ‘split’ does not exist on type ‘number’
}
复制代码
五、自定义渲染API(Custom Renderer API)
vue2.x架构问题
vue2.x最开始支持运行在浏览器中,渲染到浏览器的dom上,随着vue的流行,出现了weex和myvue。
-
weex:移动端跨平台方案,需要渲染到移动设备。weex被写在vue原项目里,缺点是这使vue原项目更大了,也不是通用解决方案。
-
myvue:小程序上使用,需要渲染到小程序框架上。myvue是单独fork一份源代码进行更改,缺点也非常明显,myvue中vue的版本跟官方版本从fork的那一刻开始,就要开始不一致了。
vue2.x项目架构对于这种渲染到不同平台不太友好,vue3.0推出了自定义渲染API解决了该问题。
下面我们先看vue2和vue3的入口写法有所不同:
// vue2
import Vue from ‘vue’
import App from ‘./App.vue’
new Vue({ => h(App)}).$mount(‘#app’)
// vue3
const { createApp } from ‘vue’
import App from “./src/App”
createApp(App).mount((‘#app’)
复制代码
vue官方实现的 createApp 会给我们的 template 映射生成 html 代码,但是要是你不想渲染生成到 html ,而是要渲染生成到 canvas 之类的不是html的代码的时候,那就需要用到 Custom Renderer API 来定义自己的 render 渲染生成函数了。
// 你自己实现一个createApp,比如是渲染到canvas的。
import { createApp } from “./runtime-render”;
import App from “./src/App”; // 根组件
createApp(App).mount(‘#app’);
复制代码
有了Custom Renderer API,如weex和myvue这类方案的问题就得到了完美解决。只需重写createApp即可。
六,更先进的组件
Fragment组件
// vue2是不允许这样写的,组件必须有一个跟节点,现在可以这样写,vue将为我们创建一个虚拟的Fragment节点。
复制代码
这样写有何好处呢?一是如果根节点不是必要的,无需创建了,减少了节点数。二是Fragment节点是虚拟的,不会DOM树中呈现。
Suspense组件
<template #fallback>
Loading…
复制代码
在Suspended-component完全渲染之前,备用内容会被显示出来。如果是异步组件,Suspense可以等待组件被下载,或者在设置函数中执行一些异步操作。
七、更快的开发体验(vite开发构建工具)
在使用webpack作为开发构建工具时,npm run dev都要等一会,项目越大等的时间越长。热重载页有几秒的延迟,但是如果用vite来做vue3的开发构建工具,npm run dev 秒开,热重载也很快。这种开发体验真是很爽,拒绝等待。
vite的原理还是用了浏览器支持import关键字了,启动项目不用webpack构建工具先构建了,浏览器直接请求路由对应的代码文件,代理服务器针对单个文件进行编译并返回。如果请求的文件里还import了其他文件,同理浏览器继续发请求,代理服务器返回。就这样实现了npm run dev时无需编译,实时请求实时编译。
总结:
其他的,数据监听方式变成了Proxy,消除了Object.defineProperty现有的限制(例如无法检测新的属性添加),并提供更好的性能。
vue3解决了vue2的一些问题,大型应用的性能问题、ts支持不友好问题,自定义渲染API解决体系架构存在的问题,如果在vue3的基础上实现weex框架会好很多。也做出了很多优化,Compostion API让代码的组织形式更好。vite开发构建工具让开发体验更好,Tree shaking让包更小、性能更优。
总的来说vue3还是非常棒的,带来了很多非常好的新特性。
推荐阅读
「自我检验」熬夜总结50个Vue知识点,全都会你就是神!!!
关注下方「前端开发博客」,回复 “加群”
加入我们一起学习,天天进步
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注前端)
最后
推荐一些系统学习的途径和方法。
每个Web开发人员必备,很权威很齐全的Web开发文档。作为学习辞典使用,可以查询到每个概念、方法、属性的详细解释,注意使用英文关键字搜索。里面的一些 HTML,CSS,HTTP 技术教程也相当不错。
CodeChina开源项目:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】
HTML 和 CSS:
用英文关键字搜索。里面的一些 HTML,CSS,HTTP 技术教程也相当不错。
CodeChina开源项目:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】
HTML 和 CSS: