随着vue3.0更新潮流,vue+ts应该是未来vue项目的一个主流方向。

以前就算用vue-class-component用来写也会有很多暗坑,但是现在vue3.0版本完美支持tsx,终于可以快乐的尝尝鲜了。

首先明确2点:

Q:ts有什么用?
A:类型检查、直接编译到原生js、引入新的语法糖

Q:为什么用ts?
A:TypeScript的设计目的应该是解决JavaScript的“痛点”:弱类型和没有命名空间,导致很难模块化,不适合开发大型程序。另外它还提供了一些语法糖来帮助大家更方便地实践面向对象的编程。

Vue 项目初始化

第一步,安装 vue-cli:
npm install -g @vue/cli
安装成功后,我们即可使用 vue 命令,测试方法:
$ vue -V
@vue/cli 4.3.1

第二步,初始化 vue 项目:
vue create vue-next-test
输入命令后,会出现命令行交互窗口,这里我们选择 Manually select features:
Vue CLI v4.3.1
? Please pick a preset:
default (babel, eslint)
❯ Manually select features
随后我们勾选:Router、Vuex、CSS Pre-processors 和 Linter / Formatter,这些都是开发商业级项目必须的:
Vue CLI v4.3.1
? Please pick a preset: Manually select features
? Check the features needed for your project:
◉ Babel
◯ TypeScript
◯ Progressive Web App (PWA) Support
◉ Router
◉ Vuex
◉ CSS Pre-processors
❯◉ Linter / Formatter
◯ Unit Testing
◯ E2E Testing

注意:Vue 3.0 项目目前需要从 Vue 2.0 项目升级而来,所以为了直接升级到 Vue 3.0 全家桶,我们需要在 Vue 项目创建过程中勾选 Router 和 Vuex,所以避免手动写初始化代码

回车后会自动安装依赖,为了加速安装速度,我们可以使用淘宝源来加快初始化速度:
vue create -r https://registry.npm.taobao.org vue-next-test
项目创建完毕后,目录结构如下:.

├── README.md
├── babel.config.js
├── package-lock.json
├── package.json
├── public
│ ├── favicon.ico
│ └── index.html
└── src
├── App.vue
├── assets
│ └── logo.png
├── components
│ └── HelloWorld.vue
├── main.js
├── router
│ └── index.js
├── store
│ └── index.js
└── views
├── About.vue
└── Home.vue

创建路由
项目开发中,我们通常需要创建新页面,然后添加路由配置,我们在 /src/views 目录下创建 Test.vue:

<template><div class="test"><h1>test page</h1></div>
</template><script>export default {}
</script><style lang="less" scoped>
.test {color: red;
}
</style>

之后在 /src/router/index.js 中创建路由配置:

import { createRouter, createWebHashHistory } from 'vue-router'
import Home from '../views/Home.vue'const routes = [{path: '/',name: 'Home',component: Home},{path: '/about',name: 'About',component: () => import(/* webpackChunkName: "about" */ '../views/About.vue')},{path: '/test',name: 'Test',component: () => import(/* webpackChunkName: "test" */ '../views/Test.vue')}
]const router = createRouter({history: createWebHashHistory(),routes
})export default router

初始化 Vue Router 的过程与 3.0 版本变化不大,只是之前采用构造函数的方式,这里改为使用 createRouter 来创建 Vue Router 实例,配置的方法基本一致,配置完成后我们还需要在 App.vue 中增加链接到 Test.vue 的路由:

<template><div id="app"><div id="nav"><router-link to="/">Home</router-link> |<router-link to="/about">About</router-link> |<router-link to="/test">Test</router-link></div><router-view/></div>
</template>

Vue组件的几种形式:

1.类组件扩展组件函数组件
类组件是我们在ts项目中使用频率最高的组件,它可以使用我们的装饰器,使组件完美的使用typescript.

<script lang="ts">
import { Component, Vue } from 'vue-property-decorator'
@Component({name: 'Demo'
})
export default class extends Vue{}
</script>

20扩展组件
和平时使用vue的方式完全相同,但是不能使用装饰器。

<script lang="ts">
import Vue from 'vue'
export default Vue.extend({})
</script>

3.函数组件
如果使用过react的话会知道react中有函数式组件,并且性能相比于其他组件要好一点但是没有生命周期。

<template functional><div><h3>函数型组件</h3></div>
</template>

常用方法尝试:

1.Component
@Component 装饰器可以接收一个对象作为参数,可以在对象中声明 components ,filters,directives等未提供装饰器的选项

<script lang="ts">
import { Component, Vue } from 'vue-property-decorator'
import HeaderComponent from '@/components/HeaderComponent.vue'
import ResizeMixin from "../mixins"
@Component({name: 'Demo',components: { // 组件HeaderComponent},directives: { // 局部指令test(el: HTMLElement, binding) {console.log(el, binding);}},filters: { // 局部过滤addOne(num: number) {return num + 1;}},mixins: [ResizeMixin],
})
export default class extends Vue{}
</script>

2.@Prop --> 数据接受参数

@Prop() str1!: string; // 必传
@Prop() str2: string | undefined; // 非必传
@Prop({ default: "默认值" }) str3: string | undefined;

3.data --> 数据绑定

private name = "张三";
private age = 18;
private userInfo: UserInfo = {name: "李四",age: 39
};

4.methods --> 方法

private addAge() {this.btn.style.background = "yellow";this.age += 1;
}

5.computed --> 计算属性

get initUser() {return "计算后的age" + this.age;
}

6.@Watch --> 监听数据的变化

interface UserInfo {name: string;age: number;
}
@Watch("age")
handelChangeAge(newVal: number, oldVal: number) {console.log("新数据" + newVal, "老数据" + oldVal);
}
// 深度监听
@Watch("userInfo", { deep: true, immediate: false })
handelChangeUserInfo(newVal: UserInfo, oldVal: UserInfo) {console.log("新数据" + newVal, "老数据" + oldVal);
}

7.@Ref --> 获取元素

<button type="button" ref="btn" @click="addAge" class="btn">测试ref
</button>
@Ref("btn") btn!: HTMLButtonElement;
addAge() {this.btn.style.background = "yellow";
}

8.@Emit --> 发布事件

// Child
<button @click="addStrClick">addStrClick</button>
<button @click="addStrClick2('1')">addStrClick</button>
@Emit()
addStrClick() {return "1";
}
@Emit()
addStrClick2(str) {return str + 1;
}
// father
<Child @addStrClick="***" @addStrClick2="***" />

生命周期

created() {console.log("created");
}
mounted() {console.log("mounted");
}

总结

需要不断尝试新鲜事物(踩坑)

vue+tsx初体验相关推荐

  1. Vue之Vue的初体验

    Vue的初体验 个人博客 https://www.boycharse.top Vue系列 上一篇:无 下一篇:02-Vue的插值操作 前言 这个系列的博客是按照我学习vue的顺序来写的.视频教程是b站 ...

  2. vue.js 初体验— Chrome 插件开发实录

    欢迎大家关注腾讯云技术社区-博客园官方主页,我们将持续在博客园为大家推荐技术精品文章哦~ 作者:陈纬杰 背景 对于经常和动画开发打交道的开发者对于Animate.css这个动画库不会陌生,它把一些常见 ...

  3. 【taro +vue】初体验

    安装 npm i -g taro @tarojs/cli taro init myApp创建一个新的项目 编译运行 npm run dev:weapp会在根目录下打包一个dist文件,用开发者工具打开 ...

  4. JointJS与vue集成初体验

    将 JointJS 添加到 Vue 项目中 安装需要的包 npm 方式 npm install jointjs yarn 方式 yarn add jointjs 在 vue 中使用 jointjs & ...

  5. vue create()获取ref_vue-next+typescript 初体验

    无意间又一次刷到了尤大介绍 Vue 3 的文章,这次决定试一下 Vue 3 的 TypeScript 支持到底如何,不管别人说什么,只有自己用的舒服才是真的舒服.Vue 2 可是因为 ts 的缘故被喷 ...

  6. Vue快速上手笔记1 - 使用初体验

    Vue快速上手笔记1 - 使用初体验 博主:李俊才 邮箱:291148484@163.com 若本文中存在的错误请告知博主更正 希望对大家有所帮助 专题目录:https://blog.csdn.net ...

  7. Vue初体验(七)使用Vue实现一个简单的聊天框

    1.实践是检验真理的唯一标准,现在我们做一个简易的聊天窗口,有一个input框,用于用户输入,一个按钮button,用于把用户的输入提交上去,然后又一个列表ul,用于展示我们每次提交的消息. 2.通过 ...

  8. 一个课程,11个项目!爬虫初体验,快来!

    <11 个案例开启 Python 爬虫初体验> <人人都能做的 Vue 3 记账本实战>

  9. 【第二趴】uni-app开发工具(手把手带你安装HBuilderX、搭建第一个多端项目初体验)

    文章目录 写在前面 HBuilderX HBuilderX 优势 HBuilderX 安装 uni-app 初体验 写在最后 写在前面 聚沙成塔--每天进步一点点,大家好我是几何心凉,不难发现越来越多 ...

  10. 小白的高德地图初体验(一) —— 打点

    小白的高德地图初体验(一)--打点 说到高德地图,肯定要推荐官方文档,☛☛☛传送门,走你~~ ☞☞小白的高德地图初体验(一) -- 打点 ☞☞小白的高德地图初体验(二)--点聚合 ☞☞小白的高德地图初 ...

最新文章

  1. 从《翔谈》说起,看美团
  2. array,vector对象 数组越界检测
  3. 作为资深的无人机从业者,卡尔曼滤波你不能不知道 通俗易懂的来说卡尔曼滤波
  4. .NET7的七项重大改进!
  5. leetcode37. 解数独(hashmap+回溯)
  6. java frame_如何在java中建立frame
  7. 单片机实训简易计算机,单片机简易计算器实验报告.doc
  8. 这一小点程序员务实的调整,可以避免整个开发团队的崩溃
  9. gbk与gb2312的区别是什么?
  10. 魔百盒ZXV10 B863AV3.2-M/B863AV3.1-M2_S905L3A-B_线刷+卡刷精简固件
  11. 概率分布F(x)和概率密度f(x)
  12. 快速掌握Photoshop简单用法
  13. 加推科技领读:2019,深圳开荒牛的TO B拓荒路
  14. 【滤波器】2. 有源滤波器概述
  15. 80亿美元侵权诉讼的随想
  16. Ceph Peering以及数据均衡的改进思路
  17. 卷积神经网络模型搭建(水果识别项目)
  18. CentOS安装Elasticsearch_IK分词器拼音分词器_部署kibana_部署es集群
  19. 如何解决删除文件时显示已经被另一程序占用打开的问题
  20. 《王者荣耀》等“爆款”游戏是如何诞生的?| 马晓轶青腾大学演讲

热门文章

  1. jmeter的吞吐量控制器
  2. VUCA时代下,如何有效提高项目成功率?
  3. 编写MTK6737平台的GPIO驱动例程(六)
  4. python匿名函数优点_python匿名函数定义及实例解析
  5. Android Tv限制后台进程数量
  6. Matlab求一阶导数
  7. gba口袋妖怪c语言源代码,查看“精灵宝可梦 火红·叶绿”的源代码
  8. 计算不规则四边形(多边形)的面积
  9. 5G究竟如何改变我们的生活?三大特性和八大应用场景
  10. /usr/lib/python2.7/site-packages/requests/__init__.py:91: RequestsDependencyWarning: urllib3 (1.25.8