是否可以用 Vue 3.0

现有的Vue 2.*

不推荐,坐等Vue 3.0出迁移工具吧,手动改的话工作量还是不小的

新项目

考虑下团队内对Vue + TS + VS Code的熟练程度。过程中你会遇到一些问题,要么靠耐心解决,要么靠经验。

  • 某度,某歌搜索Vue 3.0大多数是体验、介绍、互撕,很少有实战项目
  • 官方文档还是Vue 2.*的风格,一些最新出的Vue 3的配套是没有的,比如Volar
  • 关于TS的文档较少,目前以JS为主,想体验Vue 3.0 + TS的魅力需要靠经验和毅力,东拼西凑各种体验类文章以便快速上手
  • Vite虽香,入坑需谨慎,debugger标记不准确,可能跟 map 有关,会给调试带来一些困扰,暂时没时间解决
  • 全家桶没有完全跟上,虽然功能上可以了,但是DevTools中没有vuex模块,官方回答需要vuex自持,要等等
  • 一些第三方框架,package还不支持Vue 3.0

结论能用吗

能,只是用起来没有那么顺滑。毕竟正式版发布也没多久,生态需要慢慢跟上。但这并不妨碍你使用,而且很多改进的亮点也促使我克服这些小障碍。

Vue 3.0的魅力

开发效率提升

搭配Vite使用,显著提升项目启动速度。告别npm run serve后,上个厕所不拉肚子回来还要继续等的尴尬。

Vite是什么

如Webpack,先编译后运行



Vite借助于ES Module,先运行,根据请求实时编译+缓存

PS:仅是Dev Server,生产的Build还是回归Webpack类先编译后运行,主要为了性能

参考于 https://vitejs.dev/guide/why.html

Vite是Vue 3.0独享吗

不是,Reactive、Angular JS也都可以。当然Vue 2也可以,需要借助第三方package underfin/vite-plugin-vue2

更容易上手

看一段相对简单的代码来对比下

// Vue 2.0
export default {
name: 'index',
data () {
return {
name: '小王',
age: 18
}
},
watch:{
age (val) {
this.name = age > 30 ? '老王' : '小王'
}
},
methods: {}
} // Vue 3.0
export default {
name: 'index',
setup () {
const name = ref('小王')
const age = ref(18)
const person = reactive({
name,
age
})
watch(age, () => {
name.value = age > 30 ? '老王' : '小王' //这里必须要有.value
})
return person
}
}

在一个setup里就可以完成参数定义、watch、computed、methods等

那这样看起来只是写法上不用承受态度心里负担,但实际上也增加了 reactive、ref 等新的知识点

超甜语法糖

setup函数
<script setup lang="ts">
const name = ref('小王')
const age = ref(18)
const person = reactive({
name,
age
})
watch(age, () => {
name.value = age > 30 ? '老王' : '小王'
})
</script>

的确写法更简单了,但是这个ref和reactive我还是搞不明白

ref sugar

这是个备受争议的语法糖,已经围攻到光明顶了,有兴趣可以百度下ref sugar

<script setup lang="ts">
ref: name = '小王'
ref: age = 18
ref: person = { //不需要管reactive和ref的区别了
name,
age
}
watch(age, () => {
name = age > 30 ? '老王' : '小王' //不需要管.value了
})
</script>

PS:defineComponent还是要写的,只是setup被提到了top level

更人性化的改进

template不再要求包一个父元素了
<!-- Vue 2.0 -->
<template>
<div>
<header></header>
<main></main>
<footer></footer>
</div>
</template> <!-- Vue 3.0 -->
<template>
<header></header>
<main></main>
<footer></footer>
</template>
teleport解决跨组件操作的一系列问题

它不是帮你传递参数,而是允许你埋点,然后把代码段传递过去

<template>
<main>
<h1>Test Teleport</h1>
</main>
<div id="modalPlaceHolder"></div>
</template> <template>
<button @click="show = true">Show Modal</button>
<teleport to="#modalPlaceHolder">
<div v-if="show">
this is a modal
</div>
</teleport>
<template>

TS的智能感知来了

用过Vue 2 + TS的应该都感受过没有智能感知的时代。我的确没办法说服别人接受它没有智能感知,虽然我用自己的办法规避了这个问题。

源于整个底层都是TS写的,从Vue到Vue Router、Vuex等都支持了泛型。 加上Volar的助力,SFC的Template也可以智能感知了。

总结

  • 如果你愿意折腾,并且想提前感受Vue 3 + TS + Vite带来的不一样的体验,你可以在此时就选择它。
  • 如果考虑将Vue 2升级到Vue 3,那建议你再等等
  • 如果你不太想折腾,也想提前感受Vue 3 + TS + Vite,你可以关注我的开源配置中心Alpaca,整理下views/store/router文件夹,你就可以开始专注于写业务逻辑了

开源地址

【Alpaca】.Net版开源配置中心 - 技术选型 Vue 3.0的更多相关文章

  1. 阿里巴巴微服务与配置中心技术实践之道 配置推送 ConfigurationManagement ConfigDrivenAnyting

    阿里巴巴微服务与配置中心技术实践之道 原创: 坤宇 InfoQ 2018-02-08 在面向分布式的微服务系统中,如何通过更高效的配置管理方式,帮助微服务系统架构持续"无痛"的演进 ...

  2. 开源配置中心xxl-conf的核心原理分析

    XXL-CONF是一款轻量级的开源配置中心项目,由国内大牛许雪里开发.下面是官方对其优点作出的描述: 一个轻量级分布式配置管理平台,拥有"轻量级.秒级动态推送.多环境.跨语言.跨机房.配置监 ...

  3. 阿里巴巴微服务与配置中心技术实践之道 原创: 坤宇 InfoQ 2018-02-08

    阿里巴巴微服务与配置中心技术实践之道 原创: 坤宇 InfoQ 2018-02-08

  4. JAVA开源软件的技术选型--开源软件诞生2

    技术准备--第2篇 用日志记录“开源软件”的诞生 赤龙ERP开源地址,点亮星标,支持一下,万分感谢 码云:https://gitee.com/redragon/redragon-erp github: ...

  5. Nacos - 阿里开源配置中心

    配置中心相信大家都有听过,zookeeper.apollo等等都是配置中心的代表,但大部分都是JAVA系为主的,笔者主要开发语言使用的是Golang当然也有类似于ETCD这样的组件,但是并不方便管理也 ...

  6. Spring Cloud Config 实现配置中心,看这一篇就够了

    Spring Cloud Config 是 Spring Cloud 家族中最早的配置中心,虽然后来又发布了 Consul 可以代替配置中心功能,但是 Config 依然适用于 Spring Clou ...

  7. .NET Core + K8S + Apollo 玩转配置中心

    1.引言 Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境.不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限.流程治理等特性,适用于微服务配置管理 ...

  8. SpringCloudAlibaba注册中心与配置中心之利器Nacos实战与源码分析(上)

    不断踩坑并解决问题是每个程序员进阶到资深的必要经历并以此获得满足感,而不断阅读开源项目源码和总结思想是每个架构师成长最佳途径.本篇拉开SpringCloud Alibaba最新版本实战和原理序幕,以工 ...

  9. 撸了一个简易的配置中心,顺带整合到了SpringCloud

    大家好,我是三友~~ 最近突然心血来潮(就是闲的)就想着撸一个简单的配置中心,顺便也照葫芦画瓢给整合到SpringCloud. 本文大纲 配置中心的概述 随着历史的车轮不断的前进,技术不断的进步,单体 ...

随机推荐

  1. Python执行程序实可视化_heartrate

    最近发现了一个Python程序执行的简单实时可视化神器,名字叫 heartrate,安装完运行可以看到下面这样的炫酷过程. 虽然很炫酷,但有点看不懂. 来解释下,左边的动态数字代表每行被触发的次数.变 ...

  2. Java并发包源码学习系列:阻塞队列实现之ArrayBlockingQueue源码解析

    目录 ArrayBlockingQueue概述 类图结构及重要字段 构造器 出队和入队操作 入队enqueue 出队dequeue 阻塞式操作 E take() 阻塞式获取 void put(E e) ...

  3. mail Header Injection Exploit

    Preventing Email Header Injection - PHundamental PHP Best Practices - http://nyphp.org/phundamentals ...

  4. 一个支付宝小程序在一段时间内只能保留一个 WebSocket 连接

    一个支付宝小程序在一段时间内只能保留一个 WebSocket 连接 my.connectSocket - 支付宝开放平台 https://opendocs.alipay.com/mini/api/vx ...

  5. list里放map list 放list

    Map<String,Integer> hashMap = new HashMap<String, Integer>(); Map<String,Integer> ...

  6. loj黑暗城堡

    黑暗城堡 题目描述 你知道黑暗城堡有\(N\)个房间,M 条可以制造的双向通道,以及每条通道的长度. 城堡是树形的并且满足下面的条件: 设\(D_i\)为如果所有的通道都被修建,第i号房间与第1号房间 ...

  7. qbxt 学习笔记 10.2

    写在前面 昨晚网络咕了,而且比较晚,没交作业.解题报告写成书面的了,代码另发 + 博客. 目录 写在前面 1. 爬山算法 概述 示例 2. 模拟退火 概述 3. Meet in the Middle ...

  8. 客户端负载均衡Ribbon

    客户端负载均衡Ribbon 一.Ribbon是什么 二.Ribbon实现客户端负载均衡 三.Ribbon负载均衡策略 四.Rest请求模板类解读 4.1 RestTemplate的GET请求 第一种: ...

  9. 基于Servlet体系的HTTP请求代理转发Spring Boot组件

    背景概述 两个项目组原本都是各自负责两个产品线(产品A.产品B),由于公司业务的发展,目前需要将两个产品合并成一个大产品(功能整合,部分做取舍,最终产出产品C),前后端代码必然也需要整合,包括两个产品 ...

  10. Effective Java读书笔记--对所有对象都通用的方法

    1.覆盖equals请遵守通用规定.不需要覆写equals的场景:a.类的每个实例都是唯一的.b.类不需要提供"逻辑相等"的测试功能.c.超类已经覆盖了equals的方法.d.类是 ...