总结:
父组件先修改数据,检查子组件中有没有接受过被修改的数据;
没,父组件更新;
有,先修改和更新子组件的数据,最后父组件更新
子组件有接受父组件被修改的数据:
index beforeUpdate → list beforeUpdate → list updated → index updated
子组件没有接受父组件被修改的数据:
index beforeUpdate → index update
子组件 Input.vue
<template>
<div>
<button @click="add">add</button>
</div>
</template>
<script>
export default {
methods: {
add() {
this.$emit('add', '子组件修改父组件数据')
}
},
beforeUpdate() {
console.log('input beforeUpdate')
},
updated() {
console.log('input updated')
},
}
</script>
父组件 index.vue
<template>
<div>
<Input @add="handleAdd" />
</div>
</template>
<script>
import Input from './Input'
export default {
data() {
return {
test: '数据'
}
},
methods: {
handleAdd(data) {
this.test = data
},
},
beforeUpdate() {
console.log('index beforeUpdate')
},
updated() {
console.log('index updated')
},
components: {
Input,
},
}
</script>
在点击了 add 后,我预计控制台会输出:
index beforeUpdate
index updated
可实际结果是,控制台没有任何输出
请问老师,是我对于Vue 生命周期理解有误吗?