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

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)

http://www.xdnf.cn/news/5422.html

相关文章:

  • 深度解析谷歌TPU架构:从硬件原理到AI模型优化实战
  • USB学习【7】传输模式
  • 【内网渗透】——MS14-068漏洞利用以及复现黄金票据
  • 操作系统: 第三章节 :中断和处理机调度
  • Scrapy 核心组件解析:Request Response 的深度应用与实战
  • 缓存(5):常见 缓存数据淘汰算法/缓存清空策略
  • Oracle Goldengate并行复制进程状态查看没有transaction信息
  • 不可导的几种情况
  • ARMV8 RK3399 u-boot TPL启动流程分析 --start.S
  • TypeScript 装饰器详解
  • 论文阅读与写作:《从探索到突破:解密科研和论文写作的思维密码》
  • 17.【.NET 8 实战--孢子记账--从单体到微服务--转向微服务】--微服务基础工具与技术--loki
  • Stream流
  • 一周内学完计算机网络课程之二:计算机网络物理层的理解
  • STM32智能窗帘系统:从零到一的开发实战
  • 如何租用服务器并通过ssh连接远程服务器终端
  • 【计算机网络01】 网络组成与三种交换方式
  • Web 实时通信技术:WebSocket 与 Server-Sent Events (SSE) 深入解析
  • 【RAG】11种Chunking Strategies分块策略介绍和选择
  • VirtualBox中安装并运行ubuntu-24.04.2-desktop虚拟机
  • Linux基础整理
  • Docker Compose 完全指南:从入门到生产实践
  • java的Stream流处理
  • 数据库事务以及JDBC实现事务
  • 模型欠拟合是什么?
  • 基于VSCode + PlatformIO平台的ESP8266的DS1302实时时钟
  • AI日报 · 2025年05月11日|传闻 OpenAI 考虑推出 ChatGPT “永久”订阅模式
  • Linux中常见开发工具简单介绍
  • 05.three官方示例+编辑器+AI快速学习three.js webgl - animation - skinning - ik
  • Three.js + React 实战系列 - 职业经历区实现解析 Experience 组件✨(互动动作 + 3D 角色 + 点击切换动画)