iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >Vue3结合TypeScript项目开发实践总结
  • 219
分享到

Vue3结合TypeScript项目开发实践总结

2024-04-02 19:04:59 219人浏览 安东尼
摘要

目录概述1、compositon api1、ref 和 Reactive的区别?2、周期函数3、store使用4、router的使用2、关注点分离3、typescript支持概述

概述

vue3出来已经有一段时间了,在团队中,也进行了大量的业务实践,也有了一些自己的思考。

总的来说,Vue3无论是在底层的原理上,还是在业务的实际开发中,都有了长足的进步。

使用 proxy 代替之前的 Object.defineProperty 的API,性能更加优异,也解决了之前vue在处理对象、数组上的缺陷;在diff算法上,使用了静态标记的方式,大大提升了Vue的执行效率。

在使用的层面,我们从options Api,变成了composition Api,慢慢的在实际的业务中,我们抛弃了原本的data、methods、computed那种隔离式的写法。compositon Api,它更加聚焦,它讲究的是相关业务的聚合性。同时,在composition Api中,为了防止过于重的业务逻辑,它提供了一种关注点分离的方式,大大的提升了我们代码的可读性。

完全良好的支持了TypeScript,类型校验也成为了以后Vue3进行大型项目开发的质量保障,同时这也是面向了趋势 -- 前端的未来就是TypeScript!

1、compositon Api

compositon Api的本质,体现在代码里面,也就是一个setup函数,在这个setup函数中,返回的数据,会用到该组件的模板中。return的这个对象,一定程度上,代表了之前vue2中的data属性。


import { defineComponent, ref } from 'vue';
export default defineComponent({
    name: 'Gift',
    setup() {
        const counter = ref(0);
        return {
            counter
        }
    }
})

这时候,对于大多数初学者来说,可能存在的疑惑就是,那么我能不能定义options Api的写法,比如data、computed、watch、methods等等。

这里我需要明确的是,Vue3是完全兼容Vue2的这种options Api的写法,但是从理念上来说,更加推荐setup的方式,来写我们的组件。原因如下:Vue3的存在,本身是为了解决Vue2的问题的,Vue2的问题就是在于,聚合性不足,会导致代码越来越臃肿!setup的方式,能够让data、方法逻辑、依赖关系等聚合在一块,更方便维护。

也就是说,以后我们尽量不要写单独的data、computed、watch、methods等等,不是Vue3不支持,而是和Vue3的理念违背。

components属性,也就是一个组件的子组件,这个配置在Vue2和3的差异不大,Vue2怎么用,Vue3依然那么用。

1、ref 和 reactive的区别?

在功能方面,ref 和 reactive,都是可以实现响应式数据!
在语法层面,两个有差异。ref定义的响应式数据需要用[data].value的方式进行更改数据;reactive定义的数据需要[data].[prpoerty]的方式更改数据。


const actTitle: Ref<string> = ref('活动名称');

const actData = reactive({
    list: [],
    total: 0,
    curentPage: 1,
    pageSize: 10
});

actTitle.value = '活动名称2';

actData.total = 100;

但是在应用的层面,还是有差异的,通常来说:单个的普通类型的数据,我们使用ref来定义响应式。表单场景中,描述一个表单的key:value这种对象的场景,使用reactive;在一些场景下,某一个模块的一组数据,通常也使用reactive的方式,定义数据。

那么,对象是不是非要使用reactive来定义呢?其实不是的,都可以,根据自己的业务场景,具体问题具体分析!ref他强调的是一个数据的value的更改,reactive强调的是定义的对象的某一个属性的更改。

2、周期函数

周期函数,在Vue3中,是被单独使用的,使用方式如下:


import { defineComponent, ref, onMounted } from 'vue';
export default defineComponent({
    name: 'Gift',
    setup() {
        const counter = ref(0);
        onMounted(() => {
            // 处理业务,一般进行数据请求
        })
        return {
            counter
        }
    }
})

3、store使用

在Vue2中,其实可以直接通过this.$store进行获取,但是在Vue3中,其实没有this这个概念,使用方式如下:


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、router的使用

在Vue2中,是通过this.$router的方式,进行路由的函数式编程,但是Vue3中,是这么使用的:


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
        }
    }
})

2、关注点分离

关注点分离,应该分两层意思:第一层意思就是,Vue3的setup,本身就把相关的数据,处理逻辑放到一起,这就是一种关注点的聚合,更方便我们看业务代码。

第二层意思,就是当setup变的更大的时候,我们可以在setup内部,提取相关的一块业务,做到第二层的关注点分离。


import { useStore } from "vuex";
import { useRouter } from "vue-router";
import { defineComponent, ref, computed } from 'vue';
import useMerchantList from './merchant.js';
export default defineComponent({
    name: 'Gift',
    setup() {
        const counter = ref(0);
        const router = useRouter();
        const onClick = () => {
            router.push({ name: "AddGift" });
        }
        // 在该示例中,我们把获取商家列表的相关业务分离出去。也就是下面的merchant.ts
        const {merchantList} = useMerchantList();
        return {
            counter,
            onClick,
            merchantList
        }
    }
})

merchant.ts


import { getMerchantlist } from "@/api/rights/gift";
import { ref, onMounted } from "vue";

export default function useMerchantList(): Record<string, any> {
  const merchantList = ref([]);
  const fetchMerchantList = async () => {
    let res = await getMerchantlist({});
    merchantList.value = res?.data?.child;
  };

  onMounted(fetchMerchantList);

  return {
    merchantList
  };
}

3、TypeScript支持

这一部分内容,准确的来说,是TS的内容,不过它与Vue3项目开发,息息相关,所以真的想用Vue3,我们还是得了解TS的使用。

不过这一部分,我不会介绍TS的基础语法,主要是在业务场景中,如何组织TS。

使用TS进行业务开发,一个核心的思维是,先关注数据结构,再根据数据结构进行页面开发。以前的前端开发模式是,先写页面,后关注数据。

比如要写一个礼品列表的页面,我们可能要定义这么一些interface。总而言之,我们需要关注的是:页面数据的interface、接口返回的数据类型、接口的入参类型等等。


// 礼品创建、编辑、列表中的每一项,都会是这个数据类型。
interface IGiftItem {
  id: string | number;
  name: string;
  desc: string;
  [key: string]: any;
}

// 全局相应的类型定义
// 而且一般来说,我们不确认,接口返回的类型到底是什么(可能是null、可能是对象、也可能是数组),所以使用范型来定义interface
interface IRes<T> {
    code: number;
    msg: string;
    data: T
}
// 接口返回数据类型定义

interface IGiftInfo {
    list: Array<IGiftItem>;
    pageNum: number;
    pageSize: number;
    total: number;
}

在一个常见的接口请求中,我们一般使用TS这么定义一个数据请求,数据请求的req类型,数据请求的res类型。


export const getGiftlist = (
  params: Record<string, any>
): Promise<IRes<IGiftInfo>> => {
  return Http.get("/apis/gift/list", params);
};

到此这篇关于Vue3结合TypeScript项目开发实践总结的文章就介绍到这了,更多相关Vue3 TypeScript开发内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Vue3结合TypeScript项目开发实践总结

本文链接: https://www.lsjlt.com/news/135901.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Vue3结合TypeScript项目开发实践总结
    目录概述1、compositon Api1、ref 和 reactive的区别?2、周期函数3、store使用4、router的使用2、关注点分离3、TypeScript支持概述 ...
    99+
    2024-04-02
  • Vue3结合TypeScript项目开发实战记录
    目录概述 1、compositon Api 1、ref 和 reactive的区别? 2、周期函数 3、store使用 4、router的使用 2、关注点分离 3、TypeScrip...
    99+
    2024-04-02
  • Vue3 + TypeScript 开发总结
    目录Vue3 + TypeScript 学习一, 环境配置1.1 安装最新 Vue 脚手架 1.2 创建Vue3 项目二, 进击Vue32. 1 Vue 2 局限性2.2 Vue 3...
    99+
    2024-04-02
  • TypeScript在React项目中的使用实践总结
    序言 本文会侧重于TypeScript(以下简称TS)在项目中与React的结合使用情况,而非TS的基本概念。关于TS的类型查看可以使用在线TS工具👉TypeScri...
    99+
    2024-04-02
  • Vue3.x项目开发的一些常用知识点总结
    目录一、定义组件属性二、formatter简写三、子父组件通信四、监听组件属性变化五、自定义指令总结 PS:以下知识点都是基于 vue3.x + typescri...
    99+
    2024-04-02
  • Vue3 携手 TypeScript 搭建完整项目结构
    目录一、项目搭建二、Option API风格三、Composition API风格refreactive四、自定义Hooks五、小建议 六、一个完整的Vue3+ts项目 七...
    99+
    2024-04-02
  • 2018年终总结之SAP项目实践篇
    2018年终总结之SAP项目实践篇 2018年笔者做经历了三个SAP项目。年底了,笔者闲来无事,提起笔就所做的这三个项目做一个总结,也算是对自己做一个交代。 第一,客户循规蹈矩而比较好混的D项目 这个项目是一个...
    99+
    2023-06-05
  • Git开发实战:项目经验分享与总结
    Git是一款分布式版本控制系统,广泛应用于软件开发领域。在实际的项目开发中,合理利用Git进行团队协作和版本管理,能够极大地提高开发效率和项目质量。本文将分享我在Git开发中的实战经验,并总结一些注意事项和技巧,希望对读者有所启发和帮助。一...
    99+
    2023-11-04
    开发 git 实战
  • MybatisPlus框架项目落地实践分析总结
    目录大纲基础设计BaseEntity自动填充字段逻辑删除代码生成类查询操作Query基类AbstractQueryPageQuery普通QueryLambda Query复杂多表查询...
    99+
    2023-03-01
    Mybatis Plus框架项目实践 Mybatis Plus框架
  • Git分支管理实践:项目经验总结
    在软件开发过程中,代码的分支管理是非常重要的。Git分支管理是现代软件开发中十分重要的一环。Git的分支管理机制使得开发人员可以在更安全的环境下进行并行开发、版本控制和持续集成等工作。然而,尽管Git很强大,但假如分支无序管理或者没有遵守相...
    99+
    2023-11-04
    git 经验总结 分支管理
  • 项目实践:如何结合CSS和JavaScript打造优秀网页的经验总结
    项目实践:如何结合CSS和JavaScript打造优秀网页的经验总结随着互联网的快速发展,网页设计已经成为了各行各业都离不开的一项技能。优秀的网页设计可以给用户留下深刻的印象,提升用户体验,增加用户的黏性和转化率。而要做出优秀的网页设计,除...
    99+
    2023-11-04
    CSS 网页设计 JavaScript
  • Unity开发VR项目问题总结分析
    目录一、StreamVR问题:1.运行项目时不显示手柄控制器:2.按键动作检测出现重复问题:3.Error during OpenVR Init: Init_InterfaceNot...
    99+
    2024-04-02
  • Vue3和TypeScript怎么搭建完整的项目结构
    这篇文章主要讲解了“Vue3和TypeScript怎么搭建完整的项目结构”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Vue3和TypeScript怎么搭建完整的项目结构”吧!一、项目搭建在...
    99+
    2023-06-30
  • python项目打包发布总结
    概览 这里主要收集python项目的打包、发布和部署的常用方法,只是入门级别,深入的流程还是以官方文档为准(链接每节都已经给出)。 distutils,setuptools,pip,virtualenv 官网资料(Python...
    99+
    2023-01-31
    项目 python
  • 那些项目中常见的TypeScript错误总结
    目录引言1.TS24562.TS25543.TS11694.TS23455.TS25896.TS2322总结引言 TypeScript 错误信息由错误码和详细信息组成。例如:TS24...
    99+
    2024-04-02
  • 实战经验总结:高效开发Go语言项目
    Go语言近年来在软件开发领域中的应用越来越广泛,因为它的简洁、高效和并发处理能力。开发Go语言项目的过程中,掌握一些实战经验可以帮助开发者更高效地进行开发。本文将总结一些高效开发Go语言项目的经验,分享给读者。一、项目结构设计良好的项目结构...
    99+
    2023-11-02
    Go语言开发 实战经验 高效开发
  • Git与持续集成实践:项目经验总结
    Git与持续集成实践:项目经验总结导言:在软件开发领域,版本控制和持续集成是两个非常重要的概念。Git作为一种分布式版本控制系统,在项目开发中具有广泛的应用。而持续集成则能够提高团队的协作效率和软件交付质量。本文将总结一下我在项目中使用Gi...
    99+
    2023-11-03
    git 持续集成 项目经验
  • 项目实践:如何运用CSS框架快速开发网页的经验总结
    项目实践:如何运用CSS框架快速开发网页的经验总结引言:在如今互联网飞速发展的时代,网页设计与开发的速度和效率成为了项目成功的关键因素之一。为了更快速地实现网页布局和样式的开发,开发者借助CSS框架成为一种常见的选择。本文将通过项目实践的经...
    99+
    2023-11-02
    网页 快速开发 CSS框架
  • Git分支管理最佳实践:项目经验总结
    Git是当今最流行的版本控制系统之一,它的分支管理功能是其最大的亮点之一。在软件开发中,Git的分支管理能够帮助团队更好地协作,提高开发效率,确保代码质量。本文将总结一些Git分支管理的最佳实践,希望能够对大家有所启示。一、主分支的管理主分...
    99+
    2023-11-02
    最佳实践 项目经验 Git分支管理
  • Git版本控制最佳实践:项目经验总结
    Git版本控制是现代软件开发中不可或缺的工具,它具有快速、强大、分布式的特点,能够有效帮助团队协作,提高工作效率。在长期的实践中,我总结了一些Git版本控制的最佳实践,希望能够对大家有所帮助。一、合理规划仓库结构在创建仓库之前,我们需要合理...
    99+
    2023-11-03
    最佳实践 项目经验总结 Git版本控制
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作