js赋值变了,被赋值的对象也变了。封装组件时,初始化一个对象,将初始化对象赋值给另一个对象,与form表单双向绑定,form表单变了,与form表单双向绑定的值也变了,最终导致初始化对象改变
就是在封装组件时,初始化一个initForm对象,然后将这个对象赋值给一个formDat对象,传入form组件与form表单双向绑定。当form表单改变了,会引起formDat改变。然后想重置表单时,再令formData = initForm。这个时候form并不会重置清空。我就感到很纳闷。
<script>
import baseForm from '@/base-ui/base-form/index.js'
export default {
components: {
baseForm
},
props: {
formItems: {
type: Array,
default: () => ([])
},
labelWidth: {
type: String,
default: '90px',
},
},
data() {
return {
formData: {},
initFormData: {}
}
},
created() {
this.init()
},
computed: {
},
methods: {
init() {
this.formItems.forEach(item => {
this.initFormData[item.field] = ''
});
this.formData = this.initFormData
},
resetHandle() {
//这个时候重置表单并没有效果
this.formData = this.initFormData
},
searchClick() {
console.log(this.formData, 'formDATA')
}
}
}
</script>
然后仔细一想,原来这是浅拷贝,都是共享一个存储地址,所以一个改变的时候另一个也会改变
所以重置的时候要再调用一遍init()将form重置
resetHandle() {
this.init()
},
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了