vue中如何定义对象才能使项目更好维护

文章讨论了项目重构中遇到的接口参数问题,提出使用reactive初始化对象以避免冗余键值对,以及使用typescript的强类型优势和可能带来的开发成本。

业务场景:

1、项目重构,后端不规范无法给出接口的参数。通过控制台查看请求提交的表单数据时,发现有上百个键值对。检查发现是由于初始化数据时把接口返回的所有数据都解构到了表单项中,导致项目重构陷入了困境。

2、在进行迭代时,子组件接收到一个对象类型的 prop,需要递归查看所有父组件和该状态相关的逻辑才知道这个对象包含哪些字段

已知实现方案和优劣:

1、(可选)js 对象初始化规范

  • 在 compositionAPI 中,只允许使用 reactive 初始化对象。
    • reactive 初始化的对象必须定义所有需要响应的键,可以显性的声明对象包含的键有哪些
  • 使用 Object.keys(reactiveObj) 遍历对象进行赋值
    • 遍历原有对象进行赋值可以保证没有额外的键存在对象中
// arg 用于声明哪些键是变量
const initMallAndStore = (
  arg = {
    // 商场组织号
    orgNo: '',
    // 商场名称
    orgName: '',
    // 商场简称
    orgSimpleName: '',
    // 门店编码
    shopNo: '',
    // 门店名称
    shopName: '',
    orgId: '',
    shopId: ''
  }
) => {
  return {
    ...arg,
    // 收货人
    receiver: '物流部',
    // 收货电话
    receiverTel: '020-88888888'
  }
}
const mallAndStore = reactive(initMallAndStore())
// 获取数据 res,通过 Object.keys 遍历塞入获取的数据
Object.keys(mallAndStore).forEach((key) => {
  mallAndStore[key] = res[key]
})

2、(可选)ts

  • 优点:
    • 强类型
  • 缺点:
    • 单文件组件需要插件提供支持
    • 增加开发成本
### 如何在 Vue 3 项目中删除对象Vue 3 中,删除对象可以通过多种方式实现,具体取决于对象的存储位置以及其是否属于响应式数据结构。以下是几种常见的删除对象的方法及其示例。 #### 使用 `delete` 关键字删除普通对象属性 对于普通的 JavaScript 对象,可以直接使用 `delete` 关键字来移除某个属性。然而需要注意的是,在 Vue 3 的响应式系统中,直接删除属性可能会导致视图不更新的问题[^3]。 ```javascript const obj = reactive({ name: 'Alice', age: 25 }); delete obj.name; console.log(obj); // 输出 { age: 25 } ``` 为了确保视图能够正常更新,建议结合 Vue 提供的工具函数或者重新定义对象结构。 --- #### 利用 `toRefs` 和解构赋值处理响应式对象 当需要操作一个由 `reactive` 创建的对象时,可以借助 `toRefs` 将其中的每个属性转化为独立的响应式引用。这种方式允许更灵活地管理单个属性的状态变化,并且即使删除某些属性也能触发视图更新。 ```javascript import { reactive, toRefs } from 'vue'; const state = reactive({ user: { name: 'Bob', email: 'bob@example.com' } }); // 转换为单独的响应式引用 const { user } = toRefs(state); // 删除 user 属性 user.value = null; console.log(state.user); // 输出 null ``` 上述代码展示了如何安全地清除嵌套层次较深的数据项,同时保持组件界面同步刷新。 --- #### 数组内的对象删除逻辑 如果目标是一个包含多个子对象的数组,则推荐采用过滤器模式重构原始列表副本,从而避免原地修改带来的副作用[^1]。 ```javascript <script setup> import { ref } from 'vue'; let items = ref([ { id: 1, title: 'Item One' }, { id: 2, title: 'Item Two' }, ]); function removeById(idToRemove) { items.value = items.value.filter(item => item.id !== idToRemove); } </script> <template> <ul> <li v-for="item in items" :key="item.id"> {{ item.title }} <button @click="removeById(item.id)">Delete</button> </li> </ul> </template> ``` 此片段说明了基于条件筛选保留符合条件条目的通用做法,适用于大多数实际应用场景下的动态集合维护需求。 --- #### 初始化 Vue 3 环境并测试功能 最后提醒一下开发者朋友,在正式开发之前记得按照官方指南配置好本地运行环境[^4]: ```bash npm init vue@latest my-vue-app cd my-vue-app npm install npm run dev ``` 完成这些准备工作之后就可以放心大胆地尝试上面提到的各种技巧啦! ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值