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

Vue3 + TypeScript 核心开发技巧:从响应式到组件通信

一、组合式 API 高效开发实践

Vue3 的组合式 API 是前端工程化开发的核心,相比 Options API,它能更灵活地组织代码逻辑,结合 TypeScript 还能实现强类型约束,提升代码可维护性。

  1. 响应式数据与计算属性响应式数据是 Vue3 的基础,合理使用refcomputed能避免数据更新导致的渲染异常:

typescript

// 基础响应式定义(带类型约束) const loading = ref<boolean>(false) const dataList = ref<API.DataItem[]>([]) // 计算属性:过滤+空值保护 const filteredData = computed(() => { return dataList.value?.filter(item => item.status === 1) || [] })
  1. 生命周期与异步逻辑组合式 API 的生命周期钩子更贴合业务逻辑编写习惯,异步请求建议结合onMounted使用,并做好异常处理:

typescript

onMounted(() => { fetchData() // 页面挂载后加载数据 }) const fetchData = async () => { loading.value = true try { const res = await request.get('/api/list') dataList.value = res.records } catch (error) { message.error('数据加载失败:' + (error as Error).message) } finally { loading.value = false } }
二、组件通信最佳实践

Vue3 中组件通信更强调类型安全,通过definePropsdefineEmits实现父子组件数据交互:

vue

<!-- 父组件 --> <ChildComponent :data="listData" @update="handleUpdate" /> <!-- 子组件 --> <script setup lang="ts"> // 接收Props(强类型约束) const props = defineProps<{ data: API.DataItem[] }>() // 定义触发事件 const emit = defineEmits<{ update: [value: API.DataItem] }>() // 触发事件示例 const handleChange = (item: API.DataItem) => { emit('update', item) } </script>
三、TypeScript 类型规范
  1. 全局接口定义typings.d.ts中统一管理业务类型,提升代码复用性:

typescript

declare namespace API { // 基础数据类型 interface DataItem { id: number name: string status: number [key: string]: any } // 分页返回类型(泛型) interface PageResult<T> { records: T[] total: number current: number size: number } }
  1. 泛型请求封装利用泛型实现通用请求函数,适配不同返回类型:

typescript

const fetchList = async <T>(params: any): Promise<API.PageResult<T>> => { const res = await request.get('/api/list', { params }) return res.data }
http://www.jsqmd.com/news/598024/

相关文章:

  • Topit:5倍提升多任务效率的macOS窗口置顶神器
  • 告别重复编码:用快马ai生成arduino高效开发通用模块库
  • 技术赋能旧设备:OpenCore Legacy Patcher让Mac重获新生
  • 黑龙江省科技厅:2025年科技创新政策汇编 2026
  • 东莞盛世源机电设备有限公司:莞城街道发电机专业维修发电机销售服务商 - LYL仔仔
  • 解放双手!U校园智能刷课工具全攻略:2分钟搞定网课必修题
  • 从1.63到1.136:CesiumJS 三年版本变迁史,看WebGL三维引擎的演进与最佳实践
  • MongoDB EF Core 提供程序中的可查询加密和向量搜索
  • AutoCAD二次开发避坑指南:手把手教你选对.NET、VS和CAD版本(2025版)
  • 每日一问-20260405--戴尔显示器型号命名速查表
  • 生态廊道构建实战指南(1)—Linkage Mapper与Circuitscape环境部署详解
  • 3分钟让邮件排版变轻松:Markdown Here如何帮你告别格式烦恼
  • 3个维度解决暗黑3操作痛点:D3KeyHelper智能操作助手全面解析
  • Win10-11系统日志深度解析:追踪ShellExperienceHost触发的DCOM权限警告与音频服务关联
  • Higress AI 网关 MCP Server 实战:Docker 环境下的 REST API 集成指南
  • Odoo 19 AI功能实战:不用写代码,用自然语言就能自动化你的业务流程
  • [具身智能-250]:吾生也有涯,而知也无涯:深度学习的“模糊”智慧与泛化本质
  • 快速验证vmware16密钥格式?用快马三步生成在线检测工具原型
  • B站视频下载实战指南:解锁大会员4K画质的本地保存方案
  • sqlbot智能问数使用简介
  • 新手零基础入门:基于快马生成的vscode下载安装与初体验指南
  • 阶跃星辰 GUI-MCP 解读---(2)---决策层
  • 【渗透测试】玄机Maze 全过程wp
  • Win11 23H2任务栏Copilot图标消失?别慌,一个注册表文件+两步设置帮你永久找回
  • 告别锯齿!用TextMeshPro Sprite Asset实现完美像素字体的5个关键步骤
  • HunyuanVideo-Foley保姆级教程:Docker Compose编排WebUI+API+Redis缓存
  • HP Z440工作站BIOS配置优化:无需重启的服务器系统内修改指南
  • AI赋能开发:让快马平台智能处理9·1素材的标签与推荐
  • Win11Debloat:通过系统精简与优化实现Windows性能提升的自动化方案
  • LPDDR5 Bank架构深度解析:从Prefetch到Burst的效能密码