VUE3成熟吗(对于Vue3和Ts的心得和思考)

1 前言Vue3已经正式发布了一段时间了,各种生态已经成熟。最近使用taro+vue3重构冷链的小程序,经过了一段时间的开发和使用,有了一些自己的思考。总的来说,Vue3无论是...

1 前言

Vue3已经正式发布了一段时间了,各种生态已经成熟。最近使用taro+vue3重构冷链的小程序,经过了一段时间的开发和使用,有了一些自己的思考。

总的来说,Vue3无论是在底层原理还是在实际开发过程中,都有了很大的进步。

从源码层面来说,使用Proxy代替Object.defineProperty的API,一个是代理的对象,一个是递归监控的属性,从而在性能上有了很大的进步,并且,也解决了对象动态属性增加、数组改变监听上的缺陷;对diff算法进行优化,增加了静态标记,大大提高了Vue的执行效率;还有静态提升、事件监听缓存等一系列提升效率的手段。

从应用层面来说,主要的改变是将option API改成了composition API(组合式API),在业务中抛弃data、methods、生命周期函数隔离开的开发方式,使代码相对于业务有更强的聚合性,在代码开发、代码阅读、代码维护方面对于开发者都是更加友好。

对于typescript有了更好的支持,我们知道,对于大型的前端项目来说,使用typescript的类型校验,能使前端项目有更强的健壮性,这也使得Vue3对于大型项目的开发提供了更强的质量保证。

2 组合式API

所谓的组合式API,将Vue2中的data、methods、生命周期、数据监听等option,都封装成钩子函数,然后组合到setup函数中,其核心就在于setup函数。setup函数存在的意义,就是为了使用这些新增的组合式API,并且这些API只能在setup函数中使用。

setup函数执行的时机是,props初始化之后,beforeCreate函数执行之前,所以在执行setup时,还没有初始化Vue实例,因此在setup中不能使用this对象。setup函数的返回值会被注入到Vue实例中,供Vue组件使用,所以任何数据想在Vue组件的模板中使用,必须在setup函数中return出去。

组合式API的组合,体现在两个层面。第一层的意思是,将某一业务相关数据和处理逻辑放到一起,这是一种关注点的聚合,更方便我们编写代码、处理业务逻辑,并且能更聚焦业务逻辑,更方便我们看代码。第二层面的意思,当某个组件的业务逻辑足够复杂,setup中的代码足够大的情况下,我们可以在setup内部,进一步提取相关的一块业务,使代码逻辑更加清晰,做到了进一步的聚合作用。

如下面代码所示,将业务代码块A抽出来,则代码块A中return出来的数据就可以在组件中使用:

// 组件import functionA from 'A'export default defineComponent({ name: 'componentName', setup() { ...functionA() }})// 代码块Aexport default () => { return { a: 1 }}3 响应式API

在Vue3中响应式API,主要体现在ref和reactive两个函数。对于响应式API,想说两个问题,第一个是为什么要增加响应式API,第二个是响应式API函数ref和reactive的异同点。

3.1 为什么增加响应式API

在Vue2中所有数据都写在data的option中,data中的数据都是响应式的,这样产生的一个问题是,有些常量数据本身不需要监听,从而造成了资源的浪费。所以在Vue3中增加了响应式API,只需要对需要动态更新dom的数据进行响应式,不需要动态更新dom的数据不进行响应式处理,从很大程度上节省了资源。这里我觉得需要注意的是,写代码的时候一定要仔细思考一下,哪些数据需要进行响应式绑定,哪些数据不需要进行响应式绑定,而不是一股脑的全给绑定上,这样即使代码逻辑不能很清晰易懂,并且也会影响执行效率(写惯了Vue2的同学需要注意)。

3.2 ref和reactive的异同点

在了解了为什么要增加响应式API后,我们发现Vue3提供了两个响应式API函数,ref和reactive。为什么会提供两个API呢? 一个不就可以了吗?那么这两个API之间的区别是什么呢?

在使用层面,ref绑定的数据,需要使用[data].value进行数据更改。而reactive绑定的数据需要使用[data].[prpoerty]的方式进行数据更改。在使用场景方面,一般的,单个的普通数据,我们使用ref来定义响应式。而复杂数据,如:表单数据对象、某一模块的一组数据等,使用reactive来定义响应式。

那么,对象是不是必须用reactive来定义呢? 其实不是的,都可以。官方说法是:可以根据自身习惯使用不同的API。其实,我觉得,他们是有各自的使用场景的,ref更强调的是数据Value的改变,reactive更强调的是数据中某一属性的改变。

4 treeShaking思想

当 Javascript 项目达到一定体积时,将代码分成模块会更易于管理。但是,当这样做时,我们最终可能会导入实际上未使用的代码。Tree Shaking 是一种通过消除最终文件中未使用的代码来优化体积的方法。

Vue3使用了tree shaking的方法,将组件以及其所有的生命周期函数等方法进行分开,如果在组件中使用的代码将不会出现在最终的打包文件中,如此,会减少大大Vue3项目的打包体积。由此造成的一个结果就是,使用方法的不同。

4.1 生命周期函数的使用方法import { defineComponent, ref, onMounted } from 'vue';export default defineComponent({ name: 'Gift', setup() { const counter = ref(0); onMounted(() => { // 处理业务,一般进行数据请求 }) return { counter } }})4.2 Vuex的使用方法import { useStore } from "vuex";import { defineComponent, ref, computed } from 'vue';export default defineComponent({ name: 'Gift', setup() { const counter = ref(0); const store = useStore(); const storeData = computed(() => store); // 配合computed,获取store的值。 return { counter, storeData } }})4.3 Router的使用方法import { useStore } from "vuex";import { useRouter } from "vue-router";import { defineComponent, ref, computed } from 'vue';export default defineComponent({ name: 'Gift', setup() { const counter = ref(0); const router = useRouter(); const onClick = () => { router.push({ name: "AddGift" }); } return { counter, onClick } }})5 关于Typescript的使用

这一部分是关于Ts的内容,不过它与Vue3的开发息息相关。Vue3整体是使用Ts写的,因此,开发Vue3的项目需要使用Ts,所以,我们还是要了解TS的。

关于Ts的使用这里就不在细说了,在这里想说的的是,在实际业务场景中是如何组织Ts代码的。通过对TS的大量使用,我的一个体会是:Ts的核心思维是先关注数据结构,在根据数据结构进行页面开发。而以前的前端开发模式是,先写页面,然后再关注数据。

比如说,我们要开发一个页面,我们可能需要先定义一些interface。开发页面的时候我们要关注:页面数据的interface、接口返回数据的类型、请求参数的类型等等。

下面是开发一个列表页面的例子:

// 这是列表中每一项的数据类型interface IDataItem { id: string | number; name: string; desc: string; [key: string]: any;}// 接口返回值类型, 一般来说,我们不确定接口返回的数据的类型,因此使用泛型interface IRes<T> { code: number; msg: string; data: T}// 口返回数据类型定义interface IDataInfo { list: Array<IDataItem>; pageNum: number; pageSize: number; total: number;}// 请求export const getDatalist = ( params: Record<string, any>): Promise<IRes<IDataInfo>> => { return Http.get("/api/data/list", params);};

如上面代码,当我们的interface定义完成后,我们的页面数据基本都已清楚,直接写页面就会清晰很多,且出错概率会大大降低。

京东物流技术发展部作者:吴云阔

本文来自作者[曹瑞雪]投稿,不代表酷展号立场,如若转载,请注明出处:https://iosku.vip/sjzx/2025sop04-16798.html

(9)

文章推荐

  • 求推荐1000~1500的卡片机。最好光圈大 ccd大 是光学变焦 光学防抖的。

    网上科普有关“求推荐1000~1500的卡片机。最好光圈大ccd大是光学变焦光学防抖的。”话题很是火热,小编也是针对求推荐1000~1500的卡片机。最好光圈大ccd大是光学变焦光学防抖的。寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。这个里面我

    2025年02月05日
    786
  • 双子座和金牛座在一起合适吗?_1

    网上有关“双子座和金牛座在一起合适吗?”话题很是火热,小编也是针对双子座和金牛座在一起合适吗?寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。金牛和双子,这两个看起来是不太搭。金牛沉闷踏实、古板守旧,双子却古灵精怪、总想探求新事物,这两个人在一起能合适吗?让我

    2025年02月13日
    849
  • 上燕麻将开挂通用

    网上有关“上燕麻将开挂通用”话题很是火热,小编也是针对上燕麻将开挂通用寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。当然可以,但这样就没多大看点了,尤其是不能在网游上,缺少公平,容易被骂死,个人觉得还是在那些坑爹的单机游戏上可能有点看点,必须说话风趣幽默,要

    2025年02月14日
    835
  • 欧元走出去年颓势 有望进一步走强

      欧元延续涨势,迈向11月5日以来最强水平。  驱动因素模型显示,欧元几乎抓住一切典型的推动因素上涨,净效应超过了通常会导致其走低的全球风险情绪恶化造成的拖累。这一情形与去年的走势大为不同,当时同样的驱动因素导致欧元走低,关于欧元兑美元平价的预期升温。  虽然大盘的市场波动可能会削弱其涨幅,但

    2025年03月11日
    28
  • 腾讯控股午前涨超4% 宣布将参加2025游戏开发者大会

      腾讯控股(00700)午前上涨4.24%,现报529港元,成交额89.84亿港元。  3月13日,腾讯宣布,旗下游戏开发、发行与营运平台腾讯游戏将参与下周一至周五(17日至21日)在美国旧金山举行的2025年游戏开发者大会(GDC),天美工作室群将于GDC展馆内闭门演示尚未发行的多人冒险游戏

    2025年03月14日
    24
  • 德国对葡萄牙比分预测(欧国联丹麦 vs 葡萄牙 比分预测)

    2025年3月21日欧国联首回合:丹麦vs葡萄牙一、近期状态与攻防对比丹麦(主队)近6场表现:2胜2平2负,主场胜率50%,进攻端效率偏低(场均1.17球),但防守较稳(场均失球0.83球)。主场韧性:近6个主场不败率83%,包括2024年欧国联逼平荷兰与德国。隐患:关键战破僵能力不足,近3场对

    2025年03月22日
    19
  • 南京疫情进出最新政策南京疫情进出最新政策查询

    大家好,今天小编关注到一个比较有意思的话题,就是关于南京疫情进出最新政策的问题,于是小编就整理了4个相关介绍南京疫情进出最新政策的解答,让我们一起看看吧。南京疫情开始到解封时间?疫情爆发时间最早为7月13日;疫情解封时间是11月2号。5月13日安徽六安,14日辽宁营口,21日广东全省7月4日德宏,

    2025年03月23日
    23
  • 商汤管理层再度增持:董事长徐立及联合创始人徐冰共计增持1000万股,涉资约1490万港元

    2024年9月,商汤联合创始人徐冰曾增持商汤1000万股。本文为IPO早知道原创作者|StoneJin微信公众号|ipozaozhidao据IPO早知道消息,3月27日,商汤-W(00020.HK)获董事长兼CEO徐立、联合创始人和执行董事徐冰以每股均价1.49港元共增持1000万股,涉

    2025年03月28日
    16
  • 刚刚是地震了吗刚刚是地震了吗?[惊恐]房子都摇了

    大家好,今天小编关注到一个比较有意思的话题,就是关于刚刚是地震了吗的问题,于是小编就整理了1个相关介绍刚刚是地震了吗的解答,让我们一起看看吧。2022年9.18北京刚刚地震了吗?北京没有地震,如果你感到异常有可能会因为某些地方施工造成轻微地动了,如果北京发生地震,政府会有报道的,现在网络信息达到,只

    2025年03月28日
    20
  • 杭州日租房(太火爆日租过万)

    2025年开年以来,宇树科技的人形机器人成为资本市场和消费市场的双重焦点。继H1机器人亮相央视春晚后,宇树科技G1型号机器人因在二手租赁市场上“日薪”过万元、档期爆满引发热议。有业内人士认为,这一现象不仅折射出机器人应用场景的拓宽,更揭示了AI与硬件结合的技术突破正在推动产业迈向爆发临界点。日租1.

    2025年04月12日
    17

发表回复

本站作者后才能评论

评论列表(4条)

  • 曹瑞雪
    曹瑞雪 2025年04月26日

    我是酷展号的签约作者“曹瑞雪”!

  • 曹瑞雪
    曹瑞雪 2025年04月26日

    希望本篇文章《VUE3成熟吗(对于Vue3和Ts的心得和思考)》能对你有所帮助!

  • 曹瑞雪
    曹瑞雪 2025年04月26日

    本站[酷展号]内容主要涵盖:国足,欧洲杯,世界杯,篮球,欧冠,亚冠,英超,足球,综合体育

  • 曹瑞雪
    曹瑞雪 2025年04月26日

    本文概览:1 前言Vue3已经正式发布了一段时间了,各种生态已经成熟。最近使用taro+vue3重构冷链的小程序,经过了一段时间的开发和使用,有了一些自己的思考。总的来说,Vue3无论是...

    联系我们

    邮件:酷展号@sina.com

    工作时间:周一至周五,9:30-18:30,节假日休息

    关注我们