vue3项目开发细节记录

props定义类型的默认值default

ts 复制代码
defineProps({
    // 数组
    treeOptions: {
        type: Array as PropType<IBusinessDomainCodes[]>,
        default: () => [],
    },
    // 对象
    currentPermissionsMap: {
        type: Object as PropType<IPermissionMap>,
        default: () => ({}),
    },
})
  • 返回数组 :直接使用 [],例如 default: () => []
  • 返回对象 :使用括号 () 将对象字面量包裹起来,避免语法冲突, 例如 default: () => ({})

props定义类型type

dart 复制代码
defineProps({
    // 不推荐
    options1: {
        type: Array as () => IBusinessDomainCodes[],
        default: () => [],
    },
    // 推荐
    options2: {
        type: Array as PropType<IBusinessDomainCodes[]>,
        default: () => [],
    }
})
  • options1使用了类型断言方式 Array as () => IBusinessDomainCodes[],虽然可以工作,但不如 PropType 明确。
  • options2:使用了 PropType<IBusinessDomainCodes[]>,这是 Vue 3 官方推荐的方式,更明确和易读。

浅拷贝和深拷贝

  • 浅拷贝 :使用对象展开运算符 { ... } 创建一个新对象,并将 props.currentAuthDataSelectedDataMap 的所有可枚举属性复制到这个新对象中。
  • 特点
    • 只复制对象的第一层属性。
    • 如果对象的属性是引用类型(如对象或数组),则复制的是引用,而不是实际的值。
    • 更快,适用于简单对象或不需要深层次复制的场景。
  • 深拷贝 :使用 Lodash 的 _.cloneDeep 方法创建一个新对象,并递归复制 props.currentAuthDataSelectedDataMap 的所有属性,包括嵌套的对象和数组。
  • 特点
    • 递归复制对象的所有层级属性。
    • 如果对象的属性是引用类型,复制的是实际的值,而不是引用。
    • 更慢,适用于复杂对象或需要深层次复制的场景。

props定义类型必填

  • 必填属性 :当你设置某个属性为必填(required: true)时,Vue 会确保在使用该组件时必须传递这个属性。
  • 不需要默认值 :对于必填属性,不需要再设置默认值(default),因为 Vue 会确保属性被传递。
相关推荐
QQ1__8115175156 小时前
Spring boot名城小区物业管理系统信息管理系统源码-SpringBoot后端+Vue前端+MySQL【可直接运行】
前端·vue.js·spring boot
钛态6 小时前
前端微前端架构:大项目的救命稻草还是自找麻烦?
前端·vue·react·web
一粒黑子6 小时前
【实战解析】阿里开源 PageAgent:纯前端 GUI Agent,一行JS让网页支持自然语言操控
前端·javascript·开源
独角鲸网络安全实验室6 小时前
2026微信小程序抓包全解析:从实操落地到合规风控,解锁前端调试新范式
前端·微信小程序·小程序·抓包·系统代理绕过·https证书严格校验·进程隔离
紫微AI6 小时前
前端文本测量成了卡死一切创新的最后瓶颈,pretext实现突破了
前端·人工智能·typescript
GISer_Jing6 小时前
AI前端(From豆包)
前端·aigc·ai编程
IT枫斗者6 小时前
前端部署后如何判断“页面是不是最新”?一套可落地的版本检测方案(适配 Vite/Vue/React/任意 SPA)
前端·javascript·vue.js·react.js·架构·bug
测试修炼手册6 小时前
[测试技术] 深入理解 JSON Web Token (JWT)
前端·json
AI老李6 小时前
2026 年 Web 前端开发的 8 个趋势!
前端
里欧跑得慢6 小时前
15. Web可访问性最佳实践:让每个用户都能平等访问
前端·css·flutter·web