最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

一文詳解Vue的響應(yīng)式原則與雙向數(shù)據(jù)綁定

 更新時(shí)間:2022年08月22日 09:45:23   作者:web前端開發(fā)  
使用 Vue.js 久了,還是不明白響應(yīng)式原理和雙向數(shù)據(jù)綁定的區(qū)別?今天,我們就一起來(lái)學(xué)習(xí)一下,將解釋它們的區(qū)別,快跟隨小編一起學(xué)習(xí)學(xué)習(xí)吧

反應(yīng)性原則

它是 Vue.js 的核心特性之一,一個(gè)數(shù)據(jù)驅(qū)動(dòng)的視圖,我們修改數(shù)據(jù)視圖來(lái)響應(yīng)更新,非常優(yōu)雅。

Vue2.x 使用 Object.defineProperty() 實(shí)現(xiàn),而 Vue3.x 使用 Proxy 實(shí)現(xiàn)。 我們先來(lái)看看2.x的實(shí)現(xiàn)。

Object.defineProperty(obj, key, {
   enumerable: true,
   configurable: true,
   get: function getter () {
       return obj[key];
   },
   set: function setter (newVal) {
       ...
    }  
})

我們通過(guò)Object.defineProperty給對(duì)象obj添加屬性,可以設(shè)置對(duì)象屬性的getter和setter函數(shù)。

之后,我們每通過(guò)點(diǎn)語(yǔ)法獲取一個(gè)屬性,就會(huì)執(zhí)行這里的getter函數(shù)。 在這個(gè)函數(shù)中,我們會(huì)將調(diào)用這個(gè)屬性的依賴收集到一個(gè)集合中; 當(dāng)我們給屬性賦值時(shí),這個(gè)定義就會(huì)被觸發(fā)。 setter函數(shù),在輔助函數(shù)中,會(huì)通知集合中的依賴更新,讓數(shù)據(jù)變化驅(qū)動(dòng)視圖變化。

3.x的核心思想和2.x一樣,只是在數(shù)據(jù)劫持上使用了Proxy而不是Object.defineProperty,但是在處理數(shù)組和響應(yīng)式處理新屬性時(shí)Proxy比Object.defineProperty更方便 .

let nObj=new Proxy(obj,{
 get: function (target, propKey, receiver) {
   console.log(`getting ${propKey}!`);
   return Reflect.get(target, propKey, receiver);
 },
 set: function (target, propKey, value, receiver) {
   console.log(`setting ${propKey}!`);
   return Reflect.set(target, propKey, value, receiver);
 }
})

Vue響應(yīng)式原理的實(shí)現(xiàn)細(xì)節(jié)相信大部分人已經(jīng)很熟悉了,這里不再贅述。

雙向數(shù)據(jù)綁定

雙向數(shù)據(jù)綁定通常是指我們使用的 v-model 指令的實(shí)現(xiàn)。 它是 Vue 的一個(gè)特性,也可以說(shuō)是輸入事件和值的語(yǔ)法糖。 Vue 通過(guò) v-model 指令為組件添加輸入事件處理和值屬性賦值。

<template>
  <input v-model='localValue'/>
</template>

上面的組件等價(jià)于下面的代碼。

<template>
  <input @input='onInput' :value='localValue' />
  <span>{{localValue}}</span>
</template>
<script>
 export default{
   data(){
     return {
       localValue:'',
     }
   },
   methods:{
     onInput(v){
        this.localValue=v.target.value;
        console.log(this.localValue)
     }
   }
 }
</script>

因此,當(dāng)我們修改輸入框的值時(shí),我們通過(guò)v-model綁定的值也會(huì)同步修改。 基于以上原理,我們可以輕松實(shí)現(xiàn)一個(gè)雙向數(shù)據(jù)綁定組件。

v-model實(shí)踐

首先,我們定義一個(gè)Vue組件:

<tempalte>
 <div class="count" @click="addCount">click me {{value}}</div>
</template>
<script>
export default{
     props:{
       value:{
         type:Number,
         default:0
       }
     },
     watch:{
       value(v){
         this.localvalue=v;
       }  
     },
     methods:{
       addCount(){
          this.localvalue++;
          this.$emit('input',this.localvalue);
       }
     },
     data(){
       return{
         localvalue:0
       }
     },
     created(){
       this.localvalue=this.value;
     }
   }
</script>

上面的組件指定我們?cè)?props 中添加 value 屬性,并在 value 更新時(shí)觸發(fā) input 事件。 在創(chuàng)建的 hook 和 watch 中對(duì) localvalue 的賦值是將父組件的狀態(tài)同步到子組件。

通過(guò)上面的組件定義,我們可以使用 v-model 指令對(duì)組件進(jìn)行雙向數(shù)據(jù)綁定。

<template>
 <add-one v-model="count"></add-one>
 <span>The parent component{{count}}</span>
</tempalte>
<script>
export default{
 data() {
   return {
      count: 0,
   };
 },
 methods: {
 },
  created(){    
 }
}
</script>

以下是實(shí)際效果。

當(dāng)然,我們也可以不使用 value 和 input 事件的組合。 為了讓組件的定義更加語(yǔ)義化,我們還可以自定義屬性和事件,實(shí)現(xiàn)雙向綁定。 我們可以在組件的模型選項(xiàng)中設(shè)置值和事件。 如下:

export default{
 model:{
   value:'count',
   event:'change'
 },
 props:{
   count:{
     type:Number,
     default:0
   }
 },
 methods:{
   addCount(){
      this.localvalue++;
      this.$emit('change',this.localvalue);
   }
 },
}

由上述組件定義。

<add-one v-model="count"></add-one>

相當(dāng)于:

<template>
  <add-one @change='onChange' :count='count'></add-one>
  <span>{{count}}</span>
</template>
<script>
 export default{
   data(){
     return {
       count:0,
     }
   },
   methods:{
     onChange(v){
        this.count=v;
        console.log(this.count)
     }
   }
 }
</script>

只是v-model指令幫我們做了上面的事件添加、屬性綁定和狀態(tài)同步操作。

到此這篇關(guān)于一文詳解Vue的響應(yīng)式原則與雙向數(shù)據(jù)綁定的文章就介紹到這了,更多相關(guān)Vue雙向數(shù)據(jù)綁定內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vue動(dòng)態(tài)綁定多個(gè)類名方法詳解(:class動(dòng)態(tài)綁定多個(gè)類名)

    vue動(dòng)態(tài)綁定多個(gè)類名方法詳解(:class動(dòng)態(tài)綁定多個(gè)類名)

    vue中可以通過(guò):class=""這樣來(lái)根據(jù)一定的條件來(lái)動(dòng)態(tài)添加class,但是有時(shí)候需要判斷的條件比較多,需要?jiǎng)討B(tài)添加的class也比較多,下面這篇文章主要給大家介紹了關(guān)于vue動(dòng)態(tài)綁定多個(gè)類名(:class動(dòng)態(tài)綁定多個(gè)類名)的相關(guān)資料,需要的朋友可以參考下
    2022-11-11
  • Vue編寫多地區(qū)選擇組件

    Vue編寫多地區(qū)選擇組件

    這篇文章主要為大家詳細(xì)介紹了Vue編寫一個(gè)挺靠譜的多地區(qū)選擇組件的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • vue2 elementui if導(dǎo)致的rules判斷失效的解決方法

    vue2 elementui if導(dǎo)致的rules判斷失效的解決方法

    文章討論了在使用Vue2和ElementUI時(shí),將if語(yǔ)句放在el-form-item內(nèi)導(dǎo)致rules判斷失效的問(wèn)題,并提出了將判斷邏輯移到外部的解決方案,感興趣的朋友一起看看吧
    2024-12-12
  • 在vue項(xiàng)目中 實(shí)現(xiàn)定義全局變量 全局函數(shù)操作

    在vue項(xiàng)目中 實(shí)現(xiàn)定義全局變量 全局函數(shù)操作

    這篇文章主要介紹了在vue項(xiàng)目中 實(shí)現(xiàn)定義全局變量 全局函數(shù)操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-10-10
  • design vue 表格開啟列排序的操作

    design vue 表格開啟列排序的操作

    這篇文章主要介紹了design vue 表格開啟列排序的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-10-10
  • Vertx基于EventBus發(fā)送接受自定義對(duì)象

    Vertx基于EventBus發(fā)送接受自定義對(duì)象

    這篇文章主要介紹了Vertx基于EventBus發(fā)送接受自定義對(duì)象,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11
  • 解決vue初始化項(xiàng)目時(shí),一直卡在Project description上的問(wèn)題

    解決vue初始化項(xiàng)目時(shí),一直卡在Project description上的問(wèn)題

    今天小編就為大家分享一篇解決vue初始化項(xiàng)目時(shí),一直卡在Project description上的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-10-10
  • Vue2.0用戶權(quán)限控制解決方案

    Vue2.0用戶權(quán)限控制解決方案

    這篇文章主要介紹了Vue2.0用戶權(quán)限控制解決方法以及源碼說(shuō)明,一起學(xué)習(xí)下。
    2017-11-11
  • Vue配置文件中的proxy配置方式詳解

    Vue配置文件中的proxy配置方式詳解

    今天被vue中proxy配置困擾了一天,記錄一下,下面這篇文章主要給大家介紹了關(guān)于Vue配置文件中的proxy配置方式的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-06-06
  • 在Vue中使用Avue、配置過(guò)程及實(shí)際應(yīng)用小結(jié)

    在Vue中使用Avue、配置過(guò)程及實(shí)際應(yīng)用小結(jié)

    在項(xiàng)目中遇到通過(guò)點(diǎn)擊加號(hào)實(shí)現(xiàn)輸入框的增加、以及對(duì)該輸入框的輸入內(nèi)容進(jìn)行驗(yàn)證,通過(guò)這些誘導(dǎo)因素創(chuàng)作的這篇文章,本文重點(diǎn)給大家介紹在Vue中使用Avue、配置過(guò)程以及實(shí)際應(yīng)用,需要的朋友可以參考下
    2022-10-10

最新評(píng)論

安平县| 万荣县| 越西县| 涟水县| 邻水| 视频| 长顺县| 长阳| 大宁县| 黄石市| 余姚市| 阿鲁科尔沁旗| 沅江市| 北碚区| 温州市| 江北区| 聊城市| 昌图县| 晋城| 清河县| 庄浪县| 井冈山市| 东辽县| 会理县| 古田县| 佛教| 布拖县| 收藏| 龙游县| 荔浦县| 墨玉县| 永嘉县| 孝感市| 梧州市| 镇巴县| 湾仔区| 丹阳市| 屯昌县| 谢通门县| 察哈| 连山|