1、概述
文章主要讨论了在数据库管理中如何处理用户上传和修改商家信息的问题,特别是通过深浅拷贝技术来确保数据更新的准确性和安全性。
首先,解释了深拷贝和浅拷贝的区别:浅拷贝使得两个变量共享相同的内存地址,而深拷贝则创建新的内存空间来存储数据,确保修改一个变量不会影响另一个。接着,文章展示了在JavaScript中实现深拷贝的示例代码。
随后,详细描述了商家信息修改的流程,包括页面加载时获取用户信息、数据展示与复制、更新页面逻辑展示以及后台数据库的处理逻辑,强调了使用深拷贝的重要性以保留原始数据并生成新数据。最后,文章提到了更新完成后通过提示和页面跳转来优化用户体验。
整体而言,文章提供了一个关于数据管理和更新的全面指南,强调了技术细节和用户体验的结合。
2、深浅copy
用户将信息进行了添加和上传,在我们的数据库有我们用户自己的商家信息。当然后面还可以把这个信息和用户信息关联起来。
但对于上传后的信息,用户可以进行修改。为此先准备一个deep copy,在很多语言中都有这样一个问题。copy的数据如何修改的问题。
2.1 什么是深copy
浅copy 就只是定义一个变量A,其值存储的位置P 依然在被拷贝变量B 的存储的空间P。
深copy,就是定义一个变量A ,然后将被copy的变量B 对应存储空间P 存储的值 copy过来,并新开辟存储空间 新P,来存储刚刚copy过来的值。
因此,在没有修改A 的值时, A和B 的值是一样的。
修改后:
浅copy 修改A 的值时, A和B 的值都要修改。
深copy 修改A 的值时, A的值要修改。 B的值不会被修改。
2.2 js 中的深copy实现
es6的方式进行展开...就好,其他还有很多的方式。
//浅copy
<script>let obj1 = {name:"jd"age:12}let obj2 = obj1obj2.name = "tx"obj2.age = 13 console.log(obj1) // 这里就看到obj1的name修改为tx,age修改为13
</script>//深copy
<script>let obj1 = {name:"jd"age:12}let obj2 = {...obj1} //深copy 复制值,并重新分配存储空间obj2.name = "tx"obj2.age = 13 console.log(obj1) // 这里就看到obj1的name没有修改为tx,age没有修改为13 console.log(obj1) // 这里就看到obj2的name修改为tx,age修改为13
</script>
3、如何进行商家信息修改
3.1 进入页面获取到用户信息
onload
3.2 用户将信息展示,且获取的到数据复制给变量brandFormData
此处的brandFormData 和添加时 的数据就多一个 _id
这个 brandFormData 来自于数据库 _id是数据库自动生成。
看getbrand 方法:
3.3 进行数据更新的页面逻辑
展示在页面上就是通过页面逻辑展示,没有展示 _id
更新数据依然是 addAndUpdate 这个接口来做的,做了一个判断,就是看有没有_id.
3.4 后台数据库的逻辑
3.4.1 这里就是先预处理获取到页面传来的数据
3.4.2 然后调用update
3.4.3 接着继续数据的copy 这里使用的深copy(因为后面要删除_id,给更新的数据准备,也要给doc 判断修改那一条数据 做准备,必须要copy出来。)
通过深copy 保留了原来的数据,又重新生成了新的数据。
3.4.4 进行数据更新
doc 的id 来至于页面传来的数据
update 中的数据来自于 深copy 后删除掉 id 的数据,不删除id 就要报错,数据库是不允许更新id的
4 修改或者添加完成给予提示和跳转
uni.showToast({title:“成功”;mask: true})//延时跳转 回先前的页面setTimeout(() => {uni.navigateBack();}, 1500)