Vue2和Vue3时,利用Object.assign()方法对对象数据进行初始化或置空功能的实现。

博客围绕表单重置业务场景展开,涉及点击新增按钮重新打开弹框时重置内容,以及实现重置按钮功能时对某些数据置空。分别介绍了Vue2和Vue3的实现方法,Vue2可通过内置方法,如this.$data和this.$options.data()来实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

业务场景:

点击新增按钮进行form表单的输入填写,当再重新打开弹框时,需要把弹框的内容重置。
或者在实现重置按钮功能的时候,需要对某些数据进行置空的操作。

vue2写法

通过vue2的内置方法来进行实现。

//this.$data 获取当前状态下的data

//this.$options.data() 获取该组件初始状态下的data

Object.assign(this.$data, this.$options.data())

vue3写法

//定义一个函数把需要的值return出来
const dataDefault = () => {
  return {
    formData: {
      data: ''
    },
    searchData: {
      data: ''
    }
  }
}

//把返回值进行reactive,然后得到数据
const state = reactive(dataDefault())

//重置按钮
const resetClick = () => {
  //  state.formData 当前值    dataDefault().formData 页面初始进入时设置的值
  //  该步操作把初始值重新赋值给当前值,达到重置对象值的目的。
  Object.assign(state.formData, dataDefault().formData);
}

### Vue3 Setup 中使用 `Object.assign` 实现响应式对象修改的最佳实践 在 Vue3 的组合式 API (`setup`) 中,可以通过 `reactive` `ref` 来创建响应式数据结构。为了实现复杂的数据更新逻辑,可以结合 JavaScript 的内方法 `Object.assign()` 进行操作。 #### 使用场景分析 当需要批量更新响应式对象的部分属性,`Object.assign()` 提供了一种简洁的方式[^1]。然而需要注意的是,直接替换整个响应式对象会导致其失去响应能力,因此推荐仅更新部分属性而非完全覆盖原对象[^4]。 以下是具体实现方式: --- #### 示例代码展示 ```javascript <template> <div> <!-- 显示响应式对象中的 name --> <h1>{{ state.name }}</h1> <!-- 按钮触发更新 --> <button @click="updateState">Update State</button> <!-- 批量重 --> <button @click="resetState">Reset State</button> </div> </template> <script> import { reactive } from &#39;vue&#39;; export default { setup() { // 定义一个响应式对象 const initialState = () => ({ name: &#39;Alice&#39;, age: 30, address: &#39;Shanghai&#39; }); const state = reactive(initialState()); // 使用 Object.assign 更新部分属性 const updateState = () => { Object.assign(state, { name: &#39;Bob&#39;, age: 25 }); }; // 使用 Object.assign为初始状态 const resetState = () => { Object.assign(state, initialState()); }; return { state, updateState, resetState }; } }; </script> ``` --- #### 关键点解析 1. **保持响应式特性** - 如果直接将一个新的对象赋值给 `state`(即 `state = {}`),则会破坏原有的响应式连接[^4]。 - 而通过 `Object.assign(target, source)` 可以安全地向现有响应式对象添加更新属性而不丢失响应性[^1]。 2. **动态初始化与重** - 利用工厂函数(如 `initialState`)来封装默认值的生成逻辑[^5],便于后续调用 `Object.assign` 方法恢复原始状态。 3. **性能优化建议** - 避免频繁调用 `Object.assign` 处理大规模嵌套对象,因为这可能会引发不必要的渲染开销。对于深层嵌套的情况,考虑单独管理子节点的状态。 --- #### 注意事项 - 若需处理数组类型的响应式数据,则可以直接对其执行增删改查操作而无需借助额外工具[^4]。 - 对于非响应式对象(例如普通变量声明的对象),即使应用了 `Object.assign`,也无法自动同步视图层的变化[^2]。 --- ### 总结 综上所述,在 Vue3 的 `setup` 函数中合理运用 `Object.assign` 结合 `reactive` 创建的响应式对象能够高效完成局部字段刷新以及全局还原等功能需求[^1]。同也要留意潜在的风险点比如误替换了整个实例从而丧失观察机制等问题的发生可能性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值