【uni-app】 .sync修飾符與$emit(update:xxx)實現數據雙向綁定

最近在看uni-app文檔,看到.sync修飾符的時候,覺得很有必要記錄一下
其實uni-app是一個基于Vue.js和微信小程序開發框架的跨平臺開發工具
所以經常會聽到這樣的說法,只要你會vue,uni-app就不難上手
在看文檔的過程中,發現確實很多東西都不陌生,包括.sync修飾符,在vue2的項目中使用的也是很普及的
因為工作需要,可能下半年的側重點都在uni-app上,謹以此篇,開啟我的uni-app之旅

戳這里,跳轉uni-app文檔

在這里插入圖片描述
官網示例代碼:

	<!-- 父組件 --><template><view><syncA :title.sync="title"></syncA></view></template><script>export default {data() {return {title:"hello vue.js"}}}</script>
	<!-- 子組件 --><template><view><view @click="changeTitle">{{title}}</view></view></template><script>export default {props: {title: {default: "hello"},},methods:{changeTitle(){//觸發一個更新事件this.$emit('update:title',"uni-app")}}}</script>

uni-app中,.sync修飾符是用來雙向綁定父子組件的數據,它的實現原理是通過將父組件的數據傳遞給子組件,并在子組件中使用.sync修飾符來指定更新父組件數據的事件。

說.sync修飾符前,先說一下我們正常的父子組件傳值及在子組件中如何修改父組件的值,以下圖定義的title舉例

1、在父組件中定義數據及傳遞給子組件
在這里插入圖片描述
2、子組件中接收數據,定義觸發修改值的方法及$emit觸發自定義事件攜帶參數到父組件
在這里插入圖片描述
3、父組件中接收自定義事件,在自定義事件中修改值

在這里插入圖片描述

正常的父子組件傳值及修改值,需要props傳遞屬性到子組件,然后需要子組件觸發自定義事件到父組件去改值。而為什么不能直接在子組件中接收及直接在子組件中修改,這個在學vue基礎知識的時候,是大家都繞不開的基礎知識點,因為vue是單向數據流,為了保證數據的單向流動,便于對數據的追蹤,出現錯誤可以更迅速的定位到錯誤的位置

單向數據流
所有的 props 都遵循著單向綁定原則,props 因父組件的更新而變化,自然地將新的狀態向下流往子組件,而不會逆向傳遞。這避免了子組件意外修改父組件的狀態的情況,不然應用的數據流將很容易變得混亂而難以理解。
另外,每次父組件更新后,所有的子組件中的 props 都會被更新到最新值,這意味著你不應該在子組件中去更改一個 prop

說完父子傳值props,現在來說.sync修飾符
1、在父組件中定義數據及傳遞給子組件
在這里插入圖片描述
2、子組件中接收數據,定義觸發修改值的方法及$emit觸發update:xxx事件直接修改值
在這里插入圖片描述
對比props父子傳值及.sync修飾符雙向綁定,最直觀的感受就是代碼簡化了
.sync 修飾符實質就是父組件監聽子組件更新某個props的請求的縮寫語法,一種語法糖。

:title.sync="title"
//寫法等同于
:title="title"
@update:title="title = $event"

總結:

區別:

傳值方式:props是一種父組件向子組件傳遞數據的方式,通過將數據作為props屬性傳遞給子組件;而.sync修飾符是一種實現雙向數據綁定的方式,可以在父子組件間實現數據的雙向傳遞。

數據更新方式:對于props,子組件不能直接修改父組件傳遞的數據,只能通過在子組件內部觸發事件或調用方法來通知父組件去更新數據;而使用.sync修飾符,子組件可以直接修改父組件的數據,子組件更新時會直接影響到父組件中對應的數據。

優點和缺點:

props的優點

明確的數據流:props通過顯式地傳遞數據,使得數據的來源和使用更加清晰明確。
數據單向流動:props的數據只能由父組件向子組件傳遞,避免了數據的混亂和不可預測性。
較好的可維護性:props作為接口定義,可以提高組件的可維護性和可復用性。
缺點:

相對繁瑣:對于較為復雜的數據傳遞和組件間的通信,需要通過定義多個props,增加了代碼的復雜度。
需要額外的事件機制:子組件需要通過事件或方法通知父組件進行數據更新,增加了一定的開發成本和復雜度。
.sync修飾符的優點:

簡潔的語法:使用.sync修飾符可以簡潔地實現父子組件的雙向數據綁定。
方便的數據更新:子組件可以直接修改父組件的數據,子組件的變化會直接影響到父組件中對應的數據。
缺點:

數據綁定不夠明確:由于子組件可以直接修改父組件的數據,可能導致數據變得不可預測,增加了調試和維護的難度。
雙向綁定可能帶來性能問題:頻繁的數據變動可能導致性能問題,需要合理控制雙向綁定的使用。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/41739.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/41739.shtml
英文地址,請注明出處:http://en.pswp.cn/news/41739.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

.netcore grpc客戶端工廠及依賴注入使用

一、客戶端工廠概述 gRPC 與 HttpClientFactory 的集成提供了一種創建 gRPC 客戶端的集中方式。可以通過依賴包Grpc.Net.ClientFactory中的AddGrpcClient進行gRPC客戶端依賴注入AddGrpcClient函數提供了許多配置項用于處理一些其他事項&#xff1b;例如AOP、重試策略等 二、案…

miniExcel 生成excel

一、nuget dotnet add package MiniExcel --version 1.31.2 二、新建表及數據 ExampleProducts 三、這里我用了Dapper.Query方法 讀取excel public virtual async Task<IActionResult> Anonymous(){try{//using (var connection _dbContext.GetDbConnection())//{//…

linux中的ifconfig和ip addr

在linux操作系統中ifconfig和ip addr都是顯示網卡配置信息的命令&#xff0c;好多人有疑惑它們有什么區別呢 區別1&#xff1a;對于linux發行的版本不一樣 ip addr是對新發行版本的linux使用會比較多&#xff1b;而ifconfig是老版本遇到使用的會比較多。 區別2&#xff1a;顯…

神經網絡基礎-神經網絡補充概念-32-神經網絡與大腦

概念 神經網絡&#xff08;Neural Networks&#xff09;是受到生物神經系統啟發而設計的機器學習模型&#xff0c;用于處理和學習復雜的數據模式。盡管神經網絡的設計和工作原理與大腦有一些相似之處&#xff0c;但它們并不完全相同&#xff0c;以下是神經網絡和大腦之間的一些…

基于 KubeSphere 的應用容器化在智能網聯汽車領域的實踐

公司簡介 某國家級智能網聯汽車研究中心成立于 2018 年&#xff0c;是擔當產業發展咨詢與建議、共性技術研發中心、創新成果轉化的國家級創新平臺&#xff0c;旨在提高我國在智能網聯汽車及相關產業在全球價值鏈中的地位。 目前著力建設基于大數據與云計算的智能汽車云端運營…

RestTemplate

RestTemplate介紹 RestTemplate是Spring提供的用于訪問RESTful服務的客戶端&#xff0c;RestTemplate提供了多種便捷訪問遠程Http服務的方法,能夠大大提高客戶端的編寫效率。RestTemplate默認依賴JDK提供http連接的能力&#xff08;HttpURLConnection&#xff09;&#xff0c;…

js拼接字符串

在js中&#xff0c;你可以使用字符串拼接的方式創建新的字符串。 下面是一些常用的方法&#xff1a; 1、使用運算符&#xff1a; var str1 "Hello"; var str2 "World"; var result str1 " " str2; console.log(result); // 輸出&#xf…

【數據結構】鏈表常見題目

文章目錄 鏈表合并兩個有序鏈表反轉鏈表復制帶隨機指針的鏈表環形鏈表環形鏈表II相交鏈表移除鏈表元素鏈表中倒數第k個節點鏈表分割鏈表的回文結構鏈表的中間節點旋轉鏈表鏈表排序鏈表求和 (逆序求)鏈表求和II (正序求)重排鏈表奇偶鏈表反轉鏈表II <==> 鏈表內指定區間反…

(二)掌握最基本的Linux服務器用法——Linux下簡單的C/C++ 程序、項目編譯

1、靜態庫與動態庫 靜態庫(Static Library)&#xff1a;靜態庫是編譯后的庫文件&#xff0c;其中的代碼在編譯時被鏈接到程序中&#xff0c;因此它會與程序一起形成一個獨立的可執行文件。每個使用靜態庫的程序都會有自己的庫的副本&#xff0c;這可能會導致內存浪費。常用后綴…

opencv簡單使用

cv2庫安裝&#xff0c; conda install opencv-python注意cv2使用時&#xff0c;路徑不能有中文。&#xff08;不然會一直’None’ _ update # 處理中文路徑問題 def cv_imread(file_path): #使用之前需要導入numpy、cv2庫&#xff0c;file_path為包含中文的路徑return cv2.imd…

idea入門與maven配置的一些介紹

idea入門與maven配置的一些介紹 1.確保Java和Maven已安裝2.創建一個新的Maven項目3.導航到要創建項目的目錄配置Maven4.配置項目的pom.xml文件5.配置其他Tomcat和設置jdk6.構建和運行項目 關于idea入門基礎配置 步驟1&#xff1a;安裝IntelliJ IDEA 首先&#xff0c;從IntelliJ…

腳本語言與編譯語言的區別

文章目錄 一、語法差異二、執行方式差異三、應用領域差異四、總結 一、語法差異 腳本語言&#xff1a;腳本語言通常使用解釋器逐行執行&#xff0c;不需要事先編譯。它的語法相對簡單&#xff0c;易于學習和使用。常見的腳本語言有Python、JavaScript和Ruby等。 編譯語言&…

上海市青少年算法2023年2月月賽(丙組)

上海市青少年算法2023年2月月賽(丙組)T1 格式改寫 題目描述 給定一個僅由拉丁字符組成字符序列,需要改寫一些字符的大小寫,使得序列全部變成大寫或全部變成小寫,請統計最少修改多少個字符才能完成這項任務。 輸入格式 一個字符序列:保證僅由拉丁字符構成 輸出格式 單個整…

golang環境搭建

1. 下載、安裝 wget -O go.tar.gz https://golang.google.cn/dl/go1.21.0.linux-amd64.tar.gz sudo rm -rf /usr/local/go && sudo tar -zxvf go.tar.gz -C /usr/local2.創建工作目錄 cd mkdir -p go/{bin,pkg,src}3.添加環境變量 sudo vim /etc/profile寫入以下…

計算機競賽 python+大數據校園卡數據分析

0 前言 &#x1f525; 優質競賽項目系列&#xff0c;今天要分享的是 &#x1f6a9; 基于yolov5的深度學習車牌識別系統實現 &#x1f947;學長這里給一個題目綜合評分(每項滿分5分) 難度系數&#xff1a;4分工作量&#xff1a;4分創新點&#xff1a;3分 該項目較為新穎&am…

記錄一個編譯TubeTK時的報錯:at_check問題

在使用如下命令安裝TubeTK的cuda_nms時&#xff0c;報了一個錯誤&#xff0c;記錄一下這個錯誤和解決辦法 (base) redmeryredmery:~/Desktop/MOT/TubeTK/post_processing/nms$ python setup.py build_ext --inplace因為這個命令是在/home/redmery/Desktop/MOT/TubeTK/install/…

Talk | ACL‘23 杰出論文獎上海交通大學吳蔚琪:預訓練語言模型對本體知識的記憶與理解

本期為TechBeat人工智能社區第523期線上Talk&#xff01; 北京時間8月17日(周四)20:00&#xff0c;上海交通大學碩士研究生—吳蔚琪的Talk已準時在TechBeat人工智能社區開播&#xff01; 她與大家分享的主題是: “預訓練語言模型對本體知識的記憶與理解”&#xff0c;分享了預訓…

Python入門【TCP建立連接的三次握手、 TCP斷開連接的四次揮手、套接字編程實戰、 TCP編程的實現、TCP雙向持續通信】(二十七)

&#x1f44f;作者簡介&#xff1a;大家好&#xff0c;我是愛敲代碼的小王&#xff0c;CSDN博客博主,Python小白 &#x1f4d5;系列專欄&#xff1a;python入門到實戰、Python爬蟲開發、Python辦公自動化、Python數據分析、Python前后端開發 &#x1f4e7;如果文章知識點有錯誤…

【c語言】通訊錄(動態版+文件+背景音樂)含源碼

開飯了&#xff0c;之前寫的通訊錄&#xff0c;是否會有人覺得申請1000人的空間是不是有點用不上呀&#xff0c;怎么才能做到要多少申請多少個呢&#xff1f;&#xff1f;我們學完動態內存管理&#xff0c;和文件的相關操作&#xff0c;終于可以繼續完善我們的通訊錄了 船新版本…