当前位置: 首页 > news >正文

uniapp-商城-53-后台 商家信息(更新修改和深浅copy)

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)

相关文章:

  • 大模型项目:普通蓝牙音响接入DeepSeek,解锁语音交互新玩法
  • 【iOS】SDWebImage源码学习
  • 八股文-js篇
  • 【漫话机器学习系列】253.超平面(Hyperplane)
  • Python_day22
  • QT6 源(93)篇三:阅读与注释共用体类 QVariant 及其源代码,本类支持比较运算符 ==、!=。
  • 【计算机视觉】OpenCV实战项目:Text-Extraction-Table-Image:基于OpenCV与OCR的表格图像文本提取系统深度解析
  • 【愚公系列】《Manus极简入门》031-商业模式创新师:“模式筛选者”
  • MySQL数据库下篇
  • Python与矢量网络分析仪3671E:通道插损自动化校准(Vscode)
  • spring cloud loadbalancer实现机房感知的负载均衡
  • CSS:盒子阴影与渐变完全解析:从基础语法到创意应用
  • 大模型中的temperature参数是什么
  • LLMs之MCP:2025年5月2日,Anthropic 宣布 Claude 重大更新:集成功能上线,研究能力大幅提升
  • React+Springboot项目部署ESC服务器
  • 大学之大:东京工业大学2025.5.11
  • Pandas 时间处理利器:to_datetime() 与 Timestamp() 深度解析
  • 17.【.NET 8 实战--孢子记账--从单体到微服务--转向微服务】--微服务基础工具与技术--loki
  • web animation API 锋利的css动画控制器 (更新中)
  • 基于神经网络的无源雷达测向系统仿真实现
  • 220名“特朗普币”持有者花1.48亿美元,获邀与特朗普共进晚餐
  • Manus向全球用户开放注册
  • 美国政府信用卡被设1美元限额,10美元采购花一两小时填表
  • 普京提议恢复直接谈判,泽连斯基:望俄明日停火,乌愿谈判
  • 领证不用户口本,还需哪些材料?补领证件如何操作?七问七答
  • 泰特现代美术馆25年:那些瞬间,让艺术面向所有人