暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Vue3 + TS最佳实践

村长学前端 2021-11-17
4593
前言

最近有小伙伴去面试,被面试官灵魂拷问到:

  • 为什么Vue3推荐使用函数风格?
  • 为什么是不用new而是createXXX风格?
  • CompositionAPI设计的主要目的是什么?
  • 你在Vue3项目中用Typescript了吗?(他们项目在用这个组合熟悉ts优先考虑)

小伙伴一时语塞,回家狂补知识,老师们得知此事,必然给大家安排上!


公开课预告

如何快速掌握vue3+ts这套技术组合做开发呢?

最佳方式是找一套社区公认的最佳实践做上一个项目,这比自己刷文档效率高多了。

我的好朋友,有“东神”之称的张东老师

11月18日晚8点有一个0元公开课《Vue3 + TS最佳实践》。

会带着大家写一个项目,顺带演示Vue3+TS开发的标准姿势,为接下来进阶高级开发做好准备工作,快扫描下方二维码报名吧!


参与抽奖活动赢大礼包

村长给大家准备了5份“开课吧8周年大礼包”,欢迎大家参与抽奖,

参与条件:关注我的公众号“村长学前端”,回复“升职加薪”即可

分享给朋友中奖概率还能翻倍,请认真阅读参与规则哦~

Vue2和原生JS的问题

相信用过vue2 的小伙伴们,都对vue2中几个广受诟病的缺陷深恶痛绝。比如:

1. 使用下标修改数组中的元素值,页面不自动更新

比如,想要实现点击数组中一个元素,就让元素变成小花:

flower
在vue2中,如果这样写:



flower2
结果,点击每一项,竟然不变成小花,而且也不报错。这是为什么呢?

2. 为对象中添加新成员,页面也不自动更新。

比如: 想点击按钮,为对象临时添加一个新属性:

add
但是,在vue2中,这样写:


add2
结果,页面上依然无法自动更新出对象的新属性。这又如何解决呢?

3. 一个.vue文件中代码过多,造成“横跳”现象,给代码调试带来极大障碍,感受极其不舒适。

比如,如果一个页面中包含很多功能。

代码就是这样的:

<template>
  <div class="home">
    <ul>
      <li v-for="(val,key) of lilei" :key="key">
{{key}}:{{val}}
</li>
    </ul> 
    <button @click="add">添加班级</button>
    <hr>
    <ul>
      <li v-for="(val,i) of arr" :key="i" @click="change(i)">
{{val}}
</li>
    </ul>
    <hr>
<input v-model="str">
<button @click="search">百度一下</button>
  </div>
</template>

<script>
export default {
  name: "Home",
  data(){
    return {
      lilei:{
        sname:"Li Lei",
        sage:11
      },
      arr:["涛涛","然然","东东"],
      str:""
    }
  },
  methods:{
    add(){
      this.lilei.classname="初一2班";
    },
    change(i){
      this.arr[i]="❀"
    },
    search(){
      console.log(`搜索 ${this.str} 相关的内容...`)
    }
  }
};
</script>

而我们调试代码时,就不得不在很长的代码中上下不同位置间,不停滚动屏幕:




henggun2
这种令人眼花缭乱的,不停上下滚动到不同位置调试代码的方式,被程序员们戏
称为“横跳”问题。

其根本原因就是,vue2中采用了名为Option API的编码结构。这种结构,要求必须将所有模型数据集中保存在一个规定位置data(){}中。又要求所有的模型方法必须集中保存在methods:{}中。如下图所示:



OptionAPI

这样,随着一个组件中业务逻辑越来越多,代码就会变得非常冗长,还极其不容
易分割。如下图所示:







OptionAPI2
以上三点都是vue2中,最有代表性的广受诟病的缺陷。

Vue3+ TS的优势

另外,JavaScript语言本身也有广受诟病的缺陷——弱类型。在JavaScript语言中,一个变量,先后可以保存不同类型的数据。比如,var a=10本应该是一个保存整数数据的变量。但是,过一会儿,就可以a=“hello”,a摇身一变成了保存字符串数据的变量。这对于大型项目的协作开发来说,简直是不可接受的。

大型项目的协作开发中,强调的就是严格和标准化。比如,你和你的同事商量好,他将来要使用你写的功能时,一定会传给你一个整数。这就是一种契约。既约束你应该基于何种数据类型开发你的功能,又约束了你的同事,应该如何正确使用你的功能。只有协作开发中,你和你的同事都遵守了这份契约,将来的你的功能和你同事的程序才能联合起来运行,程序才能越做越大,才能健壮稳定。

image-20211117121046557

可是,JavaScript语言偏偏是弱类型语言。即使你和你同事口头约定将来他一定会给你整数。但是,如果他疏忽了,不小心给了你一个字符串,甚至数组等其他类型的数据。因为,JavaScript语言本身是不检查变量的数据类型的。所以,这个错误类型的数据依然会大摇大摆的进入你的功能。而这个时候,就极有可能造成你的功能运行错误。

比如,你做了一个自我介绍的组件,其中,要求将来使用你这个组件的人必须传入一个学生对象。并且,要求学生对象至少包含sname(学生姓名 字符串类型)和sage(学生年龄 数字类型)两个属性,你的组件才能正常工作。

Vue2不加TypeScript的代码如下:


intrself

如果你的同事,没有按之前你俩之间的约定传入学生类型的对象,而是传入了其他类型的对象或数据.结果就是,既不报错,执行结果也出不来,如下图所示:

程序中,最难调试的问题之一,就是执行结果不对,但是还不报错的。你连改哪里都不知道。而这就是JavaScript弱类型语言广受诟病的缺陷之一。

事到如今,有些事儿呀,你也该知道了。孩子大了,瞒不住了。

其实,以上这些问题,早已在vue3和typescript中得到了完美解决。所以,vue3+typescript,就成为时下最炙手可热的新技术潮流。身处一线开发岗位的小伙伴们,一定要紧跟技术发展的大潮流。一定要快速掌握前沿的vue3+typescript新技术、新特性和新的方法论,才能不做悲惨的前浪,不被后浪拍在沙滩上。

那么,要想学习vue3+typescript技术,首先要生成vue3+typescript技术的脚手架源代码。具体生成步骤如下所示:



结果,就生成了一套vue3+typescript的脚手架源代码。然后,用visual studio code打开刚刚生成的脚手架文件夹,这里是vue3ts。如下图所示:

image-20211117121826144

其实,开篇所说的前两个问题(用下标修改数组内容和为对象添加新属性),在vue3中已经彻底解决了。比如,我们可以将之前vue2中的代码,直接拷贝vue3脚手架中Home.vue中,直接测试运行,如下图所示:

vue3-1

发现:

1. 即使用下标修改数组内容,页面也能自动更新了

2. 即使动态为对象添加新属性,页面也能自动更新了

同时,vue3中还为了解决Option API的横跳问题,提供了更优的解决方案——Composition API。Composition API允许我们按功能组织数据和方法。打破了data(){}、methods:{}等固定结构的束缚。基本原理如下所示:


compositionAPI

这样,我们就有可能把一个小功能所需的数据和方法,集中提取到一个独立的较小的ts文件中保存。这样每个小功能代码量都很少,便于调试。然后,主组件或页面想使用这个小功能的数据和方法时,再重新引用回主组件或页面中。这样,就可以将一个大的.vue文件,拆成多个小的ts文件,每个文件代码行数大大缩短,极其便于调试了。

compositionAPI2

另外,vue3与TypeScript语言紧密结合,实现了强类型检查!就是说,在vue3+typescript的脚手架中,必须在开始编写程序时,就要严格定义好要传递的数据类型和数据结构。然后,在编码过程中,无论是调用者,还是开发者都要严格遵守数据类型和数据结构的规定。这种规定,不再是人与人之间口头的规定。而是脚手架自带的自动化的类型检查。在编码过程中,一旦发现类型使用错误,就会报错!这就严格规范了程序中的数据类型,极其便于大型项目的协作开发,也保证了项目的健壮性和稳定性。

那么,具体vue3是如何轻松解决前两个问题的呢?在vue3中,如何用最新的composition api优化自己的代码结构呢?在vue3中如何使用TypeScript实现强类型检查呢?

为了有更充裕的时间,详细为你讲述vue3+typescript最佳的开发实践经验,带你快速入门vue3+typescript开发!我向你强烈推荐“东神”0元公开课——《vue3+typescript最佳实践》




文章转载自村长学前端,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论