1、Vue 的渲染周期:


vue 如何實現響應式追蹤。

父子組件通信有很多方式,今天單獨聊下props 的方式。我們通過查找官方文檔很容發現,props傳值有靜態和動態兩種傳值方式。
當然props 還提供許多驗證,使數據更加嚴謹。
在使用父子傳值時,出現了, 按照文檔說明,例如:
1 <template> 2 <div v-if="data">{{parentName}} 3 4 <input type="text" v-model="parentName" /> 5 </div> 6 </template> 7 8 <script> 9 export default { 10 props:{ 11 parentName:String 12 }, 13 data(){ 14 return { 15 data:this.parentName 16 } 17 }, 18 19 beforeCreate(){ 20 console.log("child beforeCreate"); 21 }, 22 created(){ 23 console.log("child created"+this.parentName); 24 }, 25 mounted(){ 26 console.log("child data Mounted"+this.parentName); 27 }, 28 beforeMount(){ 29 console.log("beforeMount data"+this.parentName); 30 }, 31 beforeUpdate(){ 32 console.log("beforeUpdate data"+this.parentName) 33 } 34 35 } 36 </script> 37 38 <style> 39 40 </style>
父組件引用:
<template>
<div> <child :parent-name="name"/>
<input type="text" v-model="name" />
</div>
</template>
<script>
import child from './child.vue'
export default {
components:{
child
},
data(){
return {
name:"asda"
}
},
beforeCreate(){
console.log("parent beforeCreate")
},
created(){
console.log("parent created")
},
beforeMount(){
console.log("parent beforeMount")
},
mounted(){
console.log(" parent mounted")
this.name="hahshdf"
}
}
</script>
<style>
</style>
突然想到,這個父子組件渲染的順序如何,如上述代碼,

如圖所示,渲染順序是從子組件先掛載后,父組件在掛載。這個渲染順序可以決定我何時傳值,比較。
從執行渲染順序來說,給子組件的props 中賦值,應該在父組件掛載前,最好是在子組件創建前即 beforeCreate 方法后,賦值。 切不可在beforeCreate 賦值,會導致未定義錯誤。
如果在父組件掛載后,賦值會出現什么情況呢。

沒錯,和你猜想的很對,會觸發子組件的更新事件,會導致局部在渲染。
看文檔提示,一般的props 傳值,可以作為data()方法的中return的初始值使用,在作為初始值使用時,切記
data(){
return {
data:this.propsValue
}
}
這個是從新返回一個新值,this.propsValue 改變不會再影響data 的值。
最后說一句,現在vue 是單向的數據流,即 改變父組件中的值,可以影響子組件的值,但是改變子組件的值,父組件的值不變。
