91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Vue怎么實現響應式數據更新

發布時間:2022-11-23 09:18:37 來源:億速云 閱讀:136 作者:iii 欄目:開發技術

本文小編為大家詳細介紹“Vue怎么實現響應式數據更新”,內容詳細,步驟清晰,細節處理妥當,希望這篇“Vue怎么實現響應式數據更新”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。

首先假設我們在祖輩時候傳入進來是個動態的數據,官方不是說如果你傳入了一個可監聽的對象,那么其對象還是可響應的么?

parent父頁面:

export default {
 provide() {
  return  { foo: this.fonnB }
 },
 data(){
  return { fonnB: 'old word '} 
 }
created() {
  setTimeout(()=>{
   this.fonnB = 'new words';  // 這里僅僅foonB變化了,foo沒有變化
   this._provided.foo="new words"; // 這里foo變化了,但子組件獲得的foo 依舊是old words
   console.log( this._provided);
  },1000)
 },
}

child子頁面:

export default {
 inject:['foo'],
 data(){
  return { chilrfoo: this.foo } 
 },
 created() {
  setTimeout(()=>{
   // 子組件獲得的foo 依舊是old words
   console.log( this.foo)
  },2000)
 }
}

結果:

通過上面方式,經過驗證,子組件頁面都沒辦法實現響應更新this.foo的值。可能我們對官方理解還是有誤,下面通過網上資料和自己構思實現了響應式數據更新

示例(結果仍不可行)

很明顯上面再父組件定時器內我們是改變了數據源,這個時候我們就在想,我們改變的數據到底有沒有傳入到子孫組件中,那么要驗證這個問題,我們不妨可以在子孫組件中手動寫set 函數,computed 本身就只相當于一個get函數,當然,你也可以試試watch

parent父頁面:

export default {
provide() {
   return  { foo: this.fonnB }
  },
  data(){
   return {
    fonnB: 'old word'
   } 
  }
   created() {
   setTimeout(()=>{
    this.fonnB = "new words";  
    // 這里foo變化了,但子組件獲得的foo 依舊是old words
   },1000)

  },

 }

child子頁面:

export default {
  inject:['foo'],
  data(){
   return {
    childfooOld: this.foo
   } 
  },
  computed:{
    chilrdfoo() {
      return this.foo
    }
  },
 created () {
    console.log(this.foo)
    // -> 'old word'
    setTimeout(() => {
      console.log(this.chilrdfoo); // 這里計算屬性依舊是old words
    }, 2000);
   }
 }

通過computed,我們都知道data中有get/set,數據也是響應式的,但為什么沒更新,有點疑惑,如果有大佬知道能解釋清楚的可以探討。

但是,但是,但是!實際需求肯定沒有這么簡單,往往我們需要的是共享父組件里面的動態數據,這些數據可能來自于data 或者 store。 就是說父組件里面的數據發生變化之后,需要同步到子孫組件里面。這時候該怎么做呢?
我想的是將一個函數賦值給provide的一個值,這個函數返回父組件的動態數據,然后在子孫組件里面調用這個函數。
實際上這個函數存儲了父組件實例的引用,所以每次子組件都能獲取到最新的數據。代碼長下面的樣子:

Parent組件:

<template>
  <div class="parent-container">
   Parent組件
   <br/>
   <button type="button" @click="changeName">改變name</button>
   <br/>
   Parent組件中 name的值: {{name}}
   <Child v-bind="{name: 'k3vvvv'}" />
  </div>
</template>

<style scoped>
 .parent-container {
  padding: 30px;
  border: 1px solid burlywood;
 }
</style>

<script>
import Child from './Child'
export default {
 name: 'Parent',
 data () {
  return {
   name: 'Kevin'
  }
 },
 methods: {
  changeName (val) {
   this.name = 'Kev'
  }
 },
 provide: function () {
  return {
   nameFromParent: this.name,
   getReaciveNameFromParent: () => this.name
  }
 },
 // provide: {
 // nameFromParent: this.name,
 // getReaciveNameFromParent: () => this.name
 // },
 components: {
  Child
 }
}
</script>

Child組件

<template>
 <div class="child-container">
  Child組件
  <br/>
  <GrandSon />
 </div>
</template>
<style scoped>
 .child-container {
  padding: 30px;
  border: 1px solid burlywood;
 }
</style>
<script>
import GrandSon from './GrandSon'
export default {
 components: {
  GrandSon
 }
}
</script>

GrandSon組件:

<template>
 <div class="grandson-container">
  Grandson組件
  <br/>
  {{nameFromParent}}
  <br/>
  {{reactiveNameFromParent}}
 </div>
</template>
<style scoped>
 .grandson-container {
  padding: 30px;
  border: 1px solid burlywood;
 }
</style>
<script>
export default {
 inject: ['nameFromParent', 'getReaciveNameFromParent'],
 computed: {
  reactiveNameFromParent () {
   return this.getReaciveNameFromParent()
  }
 },
 watch: {
  'reactiveNameFromParent': function (val) {
   console.log('來自Parent組件的name值發生了變化', val)
  }
 },
 mounted () {
  console.log(this.nameFromParent, 'nameFromParent')
 }
}
</script>

為什么要使用Vue

Vue是一款友好的、多用途且高性能的JavaScript框架,使用vue可以創建可維護性和可測試性更強的代碼庫,Vue允許可以將一個網頁分割成可復用的組件,每個組件都包含屬于自己的HTML、CSS、JavaScript,以用來渲染網頁中相應的地方,所以越來越多的前端開發者使用vue。

讀到這里,這篇“Vue怎么實現響應式數據更新”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

vue
AI

弥勒县| 盖州市| 潼南县| 广水市| 龙井市| 遂宁市| 涞源县| 穆棱市| 普洱| 兴安盟| 昌吉市| 柳州市| 安远县| 呼和浩特市| 弥渡县| 花莲县| 化德县| 葵青区| 土默特左旗| 永宁县| 五家渠市| 兰溪市| 腾冲县| 闵行区| 岳普湖县| 山阳县| 荆门市| 耒阳市| 潜山县| 鄂伦春自治旗| 同德县| 台中县| 林周县| 宜兰县| 大新县| 雷州市| 龙游县| 格尔木市| 都昌县| 广安市| 桑日县|