当前位置: 首页 > news >正文

Vue 3 + TypeScript进阶用法

在掌握了 Vue 3 和 TypeScript 的基本使用后,你可以进一步探索一些进阶特性和最佳实践。这些包括更复杂的类型定义、自定义 hooks、全局状态管理等。下面是一些关键点:

1. 更复杂的类型定义

Props 和 Emits 的类型

对于组件的 props 和 emits,可以使用更精细的类型来描述它们的行为。

import { defineComponent, PropType } from 'vue';interface User {id: number;name: string;
}export default defineComponent({props: {user: {type: Object as PropType<User>,required: true}},emits: {(event: 'update:user', payload: User): boolean => true,(event: 'deleteUser'): boolean => true},setup(props, { emit }) {const handleUpdate = (newUser: User) => {emit('update:user', newUser);};return { handleUpdate };}
});

这里我们为 user prop 指定了具体的接口类型,并且详细地定义了 emits 的行为。

2. 自定义 Hooks

Hooks 是一种从函数组件中提取逻辑的方式,在 Vue 3 中通过 Composition API 实现。创建可复用的逻辑块可以帮助保持代码的整洁和可维护性。

// useFetch.ts
import { ref, onMounted, onUnmounted } from 'vue';
import axios from 'axios';function useFetch<T>(url: string) {const data = ref<T | null>(null);const error = ref<Error | null>(null);const loading = ref(true);function fetchData() {loading.value = true;axios.get(url).then(response => {data.value = response.data;}).catch(err => {error.value = err;}).finally(() => {loading.value = false;});}onMounted(fetchData);onUnmounted(() => {// 清理操作});return { data, error, loading, fetchData };
}export default useFetch;

然后在组件中使用这个 hook:

import { defineComponent } from 'vue';
import useFetch from './useFetch';interface Post {id: number;title: string;
}export default defineComponent({setup() {const { data, error, loading, fetchData } = useFetch<Post>('https://jsonplaceholder.typicode.com/posts/1');return { data, error, loading, fetchData };}
});

3. 全局状态管理 - Pinia

Pinia 是一个轻量级的状态管理库,专为 Vue 3 设计。它与 TypeScript 集成良好,支持模块化设计。

首先安装 Pinia:

npm install pinia

然后创建一个 store:

// stores/userStore.ts
import { defineStore } from 'pinia';interface UserState {id: number;name: string;
}export const useUserStore = defineStore('user', {state: (): UserState => ({id: 0,name: ''}),actions: {setUser(user: UserState) {this.$patch(user);}}
});

在组件中使用 store:

import { defineComponent } from 'vue';
import { useUserStore } from '@/stores/userStore';export default defineComponent({setup() {const userStore = useUserStore();return { userStore };}
});

4. 使用 Volar 插件

Volar 是专门为 Vue 3 设计的新一代 VS Code 插件,提供了比 Vetur 更好的 TypeScript 支持。确保你已经安装了 Volar 来获得最佳开发体验。

5. 类型安全的路由

如果你使用 Vue Router,可以通过定义路由配置的类型来增强类型安全性。

import { createRouter, createWebHistory, RouteRecordRaw } from 'vue-router';
import Home from '../views/Home.vue';const routes: Array<RouteRecordRaw> = [{path: '/',name: 'Home',component: Home},// 更多路由...
];const router = createRouter({history: createWebHistory(process.env.BASE_URL),routes
});export default router;

通过上述步骤,你可以充分利用 Vue 3 和 TypeScript 的强大功能,构建出既高效又易于维护的应用程序。

Vue 3 + TypeScript 高阶用法 https://blog.csdn.net/fghyibib/article/details/144209800?spm=1001.2014.3001.5502

相关文章:

Vue 3 + TypeScript进阶用法

在掌握了 Vue 3 和 TypeScript 的基本使用后&#xff0c;你可以进一步探索一些进阶特性和最佳实践。这些包括更复杂的类型定义、自定义 hooks、全局状态管理等。下面是一些关键点&#xff1a; 1. 更复杂的类型定义 Props 和 Emits 的类型 对于组件的 props 和 emits&#xf…...

AbutionGraph-时序向量图谱数据库-快速安装部署

运行环境 1&#xff09;操作系统 最好是使用CentOS7或者Ubuntu18以上系统&#xff0c;不满足的话请升级系统内核gcc版本至8以上版本。 支持所有国产主流操作系统银河麒麟、统信OS、深度等等&#xff0c;均做过兼容性测试&#xff1b; 2&#xff09;CPU 为确保数据库每个进…...

Delphi-HTTP通讯及JSON解析

HTTP POST 请求函数 HttpPost 此函数用于发送带有JSON内容的POST请求到指定的URL&#xff0c;并接收服务器响应。它包括了必要的异常处理&#xff0c;确保在遇到错误时可以记录日志。 参数&#xff1a; sUrl&#xff1a;目标URL。sJson&#xff1a;要发送的JSON格式字符串。 返…...

Postgres 如何使事务原子化?

原子性&#xff08;“ACID”意义上的&#xff09;要求 对于对数据库执行的一系列操作&#xff0c;要么一起提交&#xff0c;要么全部回滚&#xff1b;不允许中间状态。对于现实世界的混乱的代码来说&#xff0c;这是天赐之物。 这些更改将被恢复&#xff0c;而不是导致生产环境…...

[Vue3]简易版Vue

简易版Vue 实现ref功能 ref功能主要是收集依赖和触发依赖的过程。 export class Dep { // 创建一个类&#xff0c;使用时使用new Depconstructor(value) { // 初始化可传入一个值this._val value;this.effects new Set(); //收集依赖的容器&#xff0c;使用set数据结构}…...

ElasticSearch学习记录

服务器操作系统版本&#xff1a;Ubuntu 24.04 Java版本&#xff1a;21 Spring Boot版本&#xff1a;3.3.5 如果打算用GUI&#xff0c;虚拟机安装Ubuntu 24.04&#xff0c;见 虚拟机安装Ubuntu 24.04及其常用软件(2024.7)_ubuntu24.04-CSDN博客文章浏览阅读6.6k次&#xff0…...

LabVIEW算法执行时间评估与Windows硬件支持

在设计和实现复杂系统时&#xff0c;准确估算算法的执行时间是关键步骤&#xff0c;尤其在实时性要求较高的应用中。这一评估有助于确定是否需要依赖硬件加速来满足性能需求。首先需要对算法进行时间复杂度分析并进行实验测试&#xff0c;了解其在Windows系统中的运行表现。根据…...

经验帖 | Matlab安装成功后打不开的解决方法

最近在安装Matlab2023时遇到了一个问题&#xff1a; 按照网上的安装教程成功安装 在打开软件时 界面闪一下就消失 无法打开 但是 任务管理器显示matlab在运行中 解决方法如下&#xff1a; matlab快捷方式–>右键打开属性–>目标 填写许可证文件路径 D:\MATLAB\MatlabR20…...

Ubuntu Linux 文件、目录权限问题

本文为Ubuntu Linux操作系统- 第五弹 此文是在上期文件目录的内容操作基础上接着讲权限问题 上期回顾&#xff1a;Ubuntu Linux 目录和文件的内容操作 文件访问者身份与文件访问权限 Linux文件结构 所有者&#xff08;属主&#xff09;所属组&#xff08;属组&#xff09;其他…...

LabVIEW密码保护与反编译的安全性分析

在LabVIEW中&#xff0c;密码保护是一种常见的源代码保护手段&#xff0c;但其安全性并不高&#xff0c;尤其是在面对专业反编译工具时。理论上&#xff0c;所有软件的反编译都是可能的&#xff0c;尽管反编译不一定恢复完全的源代码&#xff0c;但足以提取程序的核心功能和算法…...

yolo11经验教训----之一

一、格式转换 可以把python中的.pt文件&#xff0c;导出为libtorch识别的格式&#xff1a; model YOLO("yolo11n.pt") model.export(format"torchscript") 二、查看结构 在c中&#xff0c;我用qt&#xff0c;这样做的&#xff1a; #include "…...

异步处理优化:多线程线程池与消息队列的选择与应用

目录 一、异步处理方式引入 &#xff08;一&#xff09;异步业务识别 &#xff08;二&#xff09;明确异步处理方式 二、多线程线程池&#xff08;Thread Pool&#xff09; &#xff08;一&#xff09;工作原理 &#xff08;二&#xff09;直面优缺点和适用场景 1.需要快…...

Hadoop生态圈框架部署 伪集群版(一)- Linux操作系统安装及配置

文章目录 前言一、下载CentOS镜像1. 下载 二、创建虚拟机hadoop三、CentOS安装与配置1. 安装CentOS2. 配置虚拟网络及虚拟网卡2.1 配置虚拟网络2.2 配置虚拟网卡 3. 安装 SSH 远程连接工具 FinalShell3.1 简介3.2 下载和安装3.2.1 下载3.2.2 安装 3.3 查看动态ip地址3.4 使用Fi…...

Go的Gin比java的Springboot更加的开箱即用?

前言 隔壁组的云计算零零后女同事&#xff0c;后文简称 云女士 &#xff0c;非说 Go 的 Gin 框架比 Springboot 更加的开箱即用&#xff0c;我心想在 Java 里面 Springboot 已经打遍天下无敌手&#xff0c;这份底蕴岂是 Gin 能比。 但是云女士突出一个执拗&#xff0c;非我要…...

pickle常见Error解决

1. pickle OverflowError: cannot serialize a bytes object larger than 4 GiB 进行pickle.dump时出现上述错误&#xff0c;可以加上“protocol4”参数。依据&#xff1a;https://docs.python.org/3/library/pickle.html#data-stream-format 2. pickle EOFError: Ran out of…...

认识Java数据类型和变量

数据类型分类 基本数据类型(8个)&#xff1a; 整数型 byte 8位 short 16位 int 32位 long 64位 默认整数类型是int类型 小数型/浮点型 float【单精度32位】 double【双进度64位】 字符型 char 16位 只能表示单个字符 布尔型 boolean 1位 只能有两个值 true 【真】 false 【…...

Qt开发技巧(二十四)滚动部件的滑动问题,Qt设置时区问题,自定义窗体样式不生效问题,编码格式问题,给按钮左边加个图,最小化后的卡死假象

继续记录一些Qt开发中的技巧操作&#xff1a; 1.滚动部件的滑动问题 再Linux嵌入式设备上&#xff0c;有时候一个页面的子部件太多&#xff0c;一屏放不下是需要做页面滑动&#xff0c;可以使用“QScrollArea”控件&#xff0c;拖来一个“QScrollArea”控件&#xff0c;将子部件…...

SHELL----正则表达式

一、文本搜索工具——grep grep -参数 条件 文件名 其中参数有以下&#xff1a; -i 忽略大小写 -c 统计匹配的行数 -v 取反&#xff0c;不显示匹配的行 -w 匹配单词 -E 等价于 egrep &#xff0c;即启用扩展正则表达式 -n 显示行号 -rl 将指定目录内的文件打…...

44.5.【C语言】辨析“数组指针”和“指针数组”

目录 1.数组指针 2.指针数组 执行结果 底层分析 1.数组指针 从语文的角度理解,"数组"修饰"指针".因此数组指针是指针 例如以下代码 #include <stdio.h> int main() {char a[5] { "ABCDE" };return 0;} 其中a就是数组指针,因为数…...

node.js基础学习-express框架-路由及中间件(十)

一、前言 Express 是一个简洁、灵活的 Node.js Web 应用框架。它基于 Node.js 的内置 HTTP 模块构建&#xff0c;提供了一系列用于构建 Web 应用程序和 API 的功能&#xff0c;使开发者能够更高效地处理 HTTP 请求和响应&#xff0c;专注于业务逻辑的实现。 其特点包括简单易用…...

SkyWalking 10.2.0 SWCK 配置过程

SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外&#xff0c;K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案&#xff0c;全安装在K8S群集中。 具体可参…...

【网络安全产品大调研系列】2. 体验漏洞扫描

前言 2023 年漏洞扫描服务市场规模预计为 3.06&#xff08;十亿美元&#xff09;。漏洞扫描服务市场行业预计将从 2024 年的 3.48&#xff08;十亿美元&#xff09;增长到 2032 年的 9.54&#xff08;十亿美元&#xff09;。预测期内漏洞扫描服务市场 CAGR&#xff08;增长率&…...

React19源码系列之 事件插件系统

事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...

2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面

代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口&#xff08;适配服务端返回 Token&#xff09; export const login async (code, avatar) > {const res await http…...

【单片机期末】单片机系统设计

主要内容&#xff1a;系统状态机&#xff0c;系统时基&#xff0c;系统需求分析&#xff0c;系统构建&#xff0c;系统状态流图 一、题目要求 二、绘制系统状态流图 题目&#xff1a;根据上述描述绘制系统状态流图&#xff0c;注明状态转移条件及方向。 三、利用定时器产生时…...

OpenLayers 分屏对比(地图联动)

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能&#xff0c;和卷帘图层不一样的是&#xff0c;分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...

算法笔记2

1.字符串拼接最好用StringBuilder&#xff0c;不用String 2.创建List<>类型的数组并创建内存 List arr[] new ArrayList[26]; Arrays.setAll(arr, i -> new ArrayList<>()); 3.去掉首尾空格...

初探Service服务发现机制

1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能&#xff1a;服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源&#xf…...

NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合

在汽车智能化的汹涌浪潮中&#xff0c;车辆不再仅仅是传统的交通工具&#xff0c;而是逐步演变为高度智能的移动终端。这一转变的核心支撑&#xff0c;来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒&#xff08;T-Box&#xff09;方案&#xff1a;NXP S32K146 与…...

【Go语言基础【13】】函数、闭包、方法

文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数&#xff08;函数作为参数、返回值&#xff09; 三、匿名函数与闭包1. 匿名函数&#xff08;Lambda函…...