淺談Vue的雙向綁定和單向數(shù)據流沖突嗎
前言
眾所周知,Vue中更加推薦單向數(shù)據流的狀態(tài)管理模式(比如Vuex),但Vue同時支持通過v-model實現(xiàn)雙向數(shù)據綁定。
那么問題來了,單項數(shù)據流和雙向數(shù)據綁定的概念,這兩種不是相互沖突的嗎?即然能用v-model雙向數(shù)據綁定,不應該就是雙向數(shù)據流了嗎?
本文主要包括以下內容
- 單向綁定
vs雙向綁定 - 單向數(shù)據流
vs雙向數(shù)據流 - 為什么說
v-model只是語法糖
單向綁定 vs 雙向綁定
單雙向綁定,指的是View層和Model層之間的映射關系。react采取單向綁定,如圖所示:

在React中,當View層發(fā)生更改時,用戶通過發(fā)出Actions進行處理,Actions中通過setState對State進行更新,State更新后觸發(fā)View更新??梢钥闯觯?code>View層不能直接修改State,必須要通過Actions來進行操作,這樣更加清晰可控
單向綁定的方式的優(yōu)點在于清晰可控,缺點則在于會有一些模板代碼,Vue則同時支持單向綁定和雙向綁定
- 單向綁定:插值形式
{{data}},v-bind也是單向綁定 - 雙向綁定:表單的
v-model,用戶對View層的更改會直接同步到Model層
實際上v-model只是v-bind:value 和 v-on:input的語法糖,我們也可以采取類似react的單向綁定。兩者各有利弊,單向綁定清晰可控,但是模板代碼過多,雙向綁定可以簡化開發(fā),但是也會導致數(shù)據變化不透明,優(yōu)缺點共存,大家可以根據情況使用。
單向數(shù)據流 vs 雙向數(shù)據流
數(shù)據流指的是組件之間的數(shù)據流動。Vue與React都是單向數(shù)據流的模型,雖然vue有雙向綁定v-model,但是vue和react父子組件之間數(shù)據傳遞,仍然還是遵循單向數(shù)據流的,父組件可以向子組件傳遞props,但是子組件不能修改父組件傳遞來的props,子組件只能通過事件通知父組件進行數(shù)據更改,如圖所示:

通過單向數(shù)據流的模型,所有狀態(tài)的改變可記錄、可跟蹤,相比于雙向數(shù)據流可加容易維護與定位問題
為什么說v-model只是語法糖
你可以用
v-model指令在表單<input>、<textarea>及<select>元素上創(chuàng)建雙向數(shù)據綁定。它會根據控件類型自動選取正確的方法來更新元素。盡管有些神奇,但v-model本質上不過是語法糖。它負責監(jiān)聽用戶的輸入事件以更新數(shù)據,并對一些極端場景進行一些特殊處理
正如上面所述,Vue文檔中說v-model只是語法糖
<input v-model=“phoneInfo.phone”/>
//在組件中使用時,實際相當于下面的簡寫
<input :value="PhoneInfo.phone" @input="val => { PhoneInfo.phone = val }"那么問題來了,為什么說v-model不是真正的雙向數(shù)據流呢?按照這道理,是不是可以認為model->view的單向數(shù)據流也是語法糖啊,也是vue作者通過一定方法實現(xiàn)的而已
真正的原因上面已經說了,數(shù)據綁定是View與Model之間的映射關系,數(shù)據流指的是組件之間的數(shù)據流動v-model不是真正的雙向數(shù)據流,是因為它不能直接修改父組件的值,比如你在v-model中綁定props中的值是會報錯的,它只能綁定組件的值
而真正的雙向數(shù)據流,比如AngularJs,是允許在子組件中直接更新父組件的值的,這就是為什么說v-model只是語法糖的原因
總結
總得來說,單雙向數(shù)據綁定與數(shù)據流是兩個不同維度的概念,數(shù)據綁定是View與Model之間的映射關系,數(shù)據流指的是組件之間的數(shù)據流動。因此,單向數(shù)據流也可有雙向綁定,雙向數(shù)據流也可以有雙向綁定,兩者不應該混為一談

參考資料
Vue的單向數(shù)據流和雙向數(shù)據綁定不是沖突的嗎?
到此這篇關于淺談Vue的雙向綁定和單向數(shù)據流沖突嗎的文章就介紹到這了,更多相關Vue雙向綁定和單向數(shù)據流內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Vue3 的ref和reactive的用法和區(qū)別示例解析
ref和reactive是Vue3中用來實現(xiàn)數(shù)據響應式的API,一般情況下,ref定義基本數(shù)據類型,reactive定義引用數(shù)據類型,本文給大家介紹Vue3 的ref和reactive的用法和區(qū)別,感興趣的朋友一起看看吧2023-10-10

