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)