vue3 Composition 组合式API+TypeScript基本使用

首先我们创建一个vue3的项目再引入TypeScript

如果你还在用vue2 且不知道怎么创建vue3项目
不妨看看我的文章
将vue2项目升级成vue3项目述
如果你还不知道怎么在vue3项目中引入TypeScript
不妨看看我的文章
vue3项目集成TypeScript

为了节省时间 我们直接将代码写在App.vue中

首先我们来看第一种 ref绑定数据
我们需要在App.vue中给 script标签加上lang=“ts” 当然 这个应该在你引入TypeScript时系统就已经给你加好了
表示我们用的是TypeScript语法
然后我们从vue中导入自己需要的方法

import { defineComponent,ref } from 'vue';

defineComponent也是系统会在你集成 TypeScript时帮你写好的 因为TypeScript组件都需要用defineComponent包裹后导出

export default defineComponent({
});

然后我们在组件中加入Composition 组合式开发的主体生命周期 setup

export default defineComponent({
 setup(){
   
 }
});

然后在setup中通过ref定义一个属性

setup(){
    let min = ref<string>("创建");
    return {
      min
    }
 }

我们看到 我们定义了一个min 变量 提示通过ref定义的 ref上绑定了泛型 <string.
限制变量必须是string 字符串类型
然后在setup中返回min 这样他就成了一个响应式变量 我们就可以在页面中使用了
我们在界面中编写

<template>
  <div>
    {{ min }}
  </div>
</template>

在这里插入图片描述
这样我们的效果就出来了
然后我们引入reactive

并定义一个名为user的ts数据接口

import { defineComponent,reactive } from 'vue';
interface user{
  id: number
  name: string,
  age: number
}

然后我们将setup中代码改成

setup(){
    let user:Array<Object> = reactive([
         {
          id:0,
          name: '张三',
          age: 33
         } as user,
         {
          id:1,
          name: '李四',
          age: 22
         } as user,
         {
          id:2,
          name: '王五',
          age: 12
         } as user
    ])
    return {
      user
    }
 }

这里我们定义了一个user变量 要求他是一个Array数组类型 并用泛型控制数组中只能是Object对象类型

然后大家可以看到 我们user数组中每一个下标对象中的对象后面都有一个 as user 意思是他实现了上面定义的 user接口 数据格式也必须和user接口定义的一样
比我 我们把id改成字符串
在这里插入图片描述
这是 我们的代码就报错了 因为 接口规定 id必须是number数字类型的
但很多时候 这些数据是后端返回的 万一我们真不确定他是数字还是字符串呢?

我们将接口代码改成

interface user{
  id: number|string,
  name: string,
  age: number
}

这是我们看到 id 对应的类型 是 number|string 这个| 在ts语法中就是或的意思 规定id可以是 数字number或字符串string
在这里插入图片描述
这样我们代码就跑起来了

然后我们知道setup返回了user数组 然后他就成了响应式数据 我们在界面中遍历使用

<template>
  <div>
    <div
      v-for = "item in user"
      :key = "item.id"
    >
        {{ item.name }}
    </div>
  </div>
</template>

运行结果如下
在这里插入图片描述
然后我们多引入一个toRefs
然后在定义另外一个接口
参考代码如下

import { defineComponent,reactive,toRefs } from 'vue';
interface user{
  id: number|string,
  name: string,
  age: number
}
interface architecture{
  material:string,
  consumption:number,
  setMaterial(material:string):void
  getMaterial():string
}

然后我们不要删刚才写的代码 直接在中间加入

let data = reactive<architecture>({
  material: "白宫",
  consumption: 4000,
  setMaterial(material:string){
    this.material = material;
  },
  getMaterial(){
    console.log(this.material);
    return this.material
  }
})

千万别忘了返回data
这次大家可以看出 我们用了toRefs 返回data

return {
      user,
      ...toRefs(data)
    }

toRefs用于拆解对象 将里面的字段全变成响应式数据 就说 现在data中定义的变量和方法 都直接变成了响应式数据

我们直接在界面中编写

 <div>
  <div
     v-for = "item in user"
     :key = "item.id"
   >
       {{ item.name }}
   </div>
   <div>
       {{ material }}
       <button @click = "setMaterial('李四')">setMaterial</button>
       <button @click = "getMaterial">getMaterial</button>
   </div>
 </div>

在这里插入图片描述
我们可以看到输出data中的material是没问题的
然后我们点击setMaterial
在这里插入图片描述
可以看到 白宫变成了李四 说明setMaterial方法也映射成功了
然后点击getMaterial
在这里插入图片描述
也执行成功了 这就是getMaterial的作用

可我们发现 consumption压根没用过 那么我们在data中给他干掉

在这里插入图片描述
结果他就报错了

然后我们在architecture接口上 更改代码如下

interface architecture{
  material:string,
  consumption?:number,
  setMaterial(material:string):void
  getMaterial():string
}

变量后面放个问号 就表示 可以有 也可以没有

然后我们代码就跑起来了
在这里插入图片描述
然后我们来求一下user数组中所有员工的年龄

和一共有多少为员工
我们先来引入computed计算属性
参考代码如下

import { defineComponent,reactive,toRefs,computed } from 'vue';

我们改一下原来的user 对象数组代码 改成

let userlist = [
  {
    id:"1324124",
    name: '张三',
    age: 33
  } as user,
  {
  id:1,
  name: '李四',
  age: 22
  } as user,
  {
  id:2,
  name: '王五',
  age: 12
  } as user
]
let user:Array<Object> = reactive(userlist)

然后我们来编写两个计算属性

var avgAge = computed(():number => {
let ages = 0;
  userlist.map(item => {
      ages = ages + item.age;
  })
  return ages;
})
var avglength = computed(():number => {
  let ages = 0;
  userlist.map(item => {
      ages = ages + 1;
  })
  return ages;
})

这里我们定义了两个计算属性绑定的变量 其实有多少员工 直接用数组的length就好了 只是我想演示一下 计算属性是可以定义多个的
我们一个 将所有的age字段相加
另一个 集合了所有的人数
然后将他们返回

return {
...toRefs(data),
  user,
  avgAge,
  avglength
}

然后在页面上输出这两个变量

<div>
  <div
    v-for = "item in user"
    :key = "item.id"
  >
      {{ item.name }}
  </div>
  <div>
      {{ material }}
      <button @click = "setMaterial('李四')">setMaterial</button>
      <button @click = "getMaterial">getMaterial</button>
  </div>
  <div>总年龄:{{ avgAge }}</div>
  <div>总人数:{{ avglength }}</div>
</div>

在这里插入图片描述
没有任何问题

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
### 回答1: Vue3是一种前端开发框架,它的目标是提供更好的性能和开发体验。与之前的版本相比,Vue3在许多方面进行了改进和优化。 TS代表TypeScript,它是一种类型安全的编程语言。Vue3与TS的结合可以提供更强大的开发工具和更好的代码提示,使开发者能够更轻松地编写可维护的代码。 Vite是一种用于前端开发的构建工具。它基于ES模块来进行快速的热更新,从而提供了更快的开发体验。使用Vite可以在开发过程中实时预览和调试项目,大大提高了开发效率。 Vant是一套基于Vue的移动端组件库。它提供了丰富的UI组件和样式,可以帮助开发者快速搭建漂亮且高效的移动端应用程序。 综上所述,Vue3 TS Vite Vant 是一种在前端开发中频繁使用的组合。它们共同提供了更好的性能、开发体验和移动端开发支持。开发者可以通过使用Vue3和TS来编写可维护的代码,并使用Vite和Vant来提高开发效率和用户体验。 ### 回答2: Vue3是基于TypeScript的一款前端框架,它相较于Vue2有着更加强大的性能和更高效的开发体验。 Vue3采用了模块化的设计,将代码拆分为不同的模块,使得开发者可以按需引入,减少了打包体积,提高了加载速度。此外,Vue3还引入了Composition API,这是一套全新的 API 设计风格,使得组件之间的业务逻辑可以更好地共享和封装,提高了代码的可复用性。 而Vite是一款由Vue团队开发的新一代前端构建工具,它具有快速的冷启动时间和热更新能力。Vite利用浏览器原生的 ES 模块导入能力,在开发过程中使用一种需要少量转换的现代化方式加载代码。这使得构建过程更加快速和高效,提高了开发效率。 而Vant是一款基于Vue3的移动端组件库,它提供了一系列常用的移动端UI组件,可以帮助开发者快速搭建漂亮的移动端界面。Vant的设计风格简洁大方,组件丰富多样,支持按需引入,可以满足各种不同的业务需求。 通过将Vue3、TypeScript、Vite和Vant结合使用,开发者可以在项目中获得更好的开发体验和更高的效率。Vue3提供了强大的开发能力,TypeScript增强了代码的可读性和可维护性,Vite提供了快速的开发和构建速度,Vant则提供了丰富的移动端组件。这一组合使得前端开发更加高效、灵活和便捷。 ### 回答3: Vue3是一种用于构建用户界面的现代JavaScript框架,它结合了React的组件化开发和Angular的响应式数据绑定。相对于Vue2,Vue3提供了更快的性能、更小的包体积以及更好的开发体验。 TS是指TypeScript,它是JavaScript的一个超集,为JavaScript添加了静态类型检查和更强大的开发工具。使用TypeScript可以提供更好的代码提示、错误检查和重构支持,能够使代码更加健壮和易于维护。 Vite是Vue3的一个新型构建工具,它基于ES模块的原生导入机制,能够快速地在开发过程中进行热重载和快速构建。相比于Webpack等传统构建工具,Vite具有更快的冷启动速度和更低的内存占用,提供了更好的开发体验。 Vant是一套基于Vue3的移动组件库,它提供了丰富的UI组件和常用功能,能够快速构建出美观、高效的移动应用。Vant的组件能够自动适配不同屏幕尺寸,支持响应式布局和主题定制,开发者可以根据自己的需求进行扩展和定制。 综上所述,Vue3、TypeScript、Vite和Vant是一套完整的技术栈,能够提供高效、可靠和易于维护的前端开发体验。在使用这些技术的过程中,开发者可以快速构建出优秀的Web应用和移动应用,并且能够享受到更好的性能和开发效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值