gpt4 book ai didi

javascript - Hook=componentUpdated of Vue 指令未触发

转载 作者:搜寻专家 更新时间:2023-10-30 22:17:23 24 4
gpt4 key购买 nike

我刚遇到一个问题,如果一个组件只更新自己的数据,它不会触发父组件指令的hook=componentUpdated

作为Vue official Guide说:

componentUpdated: called after the containing component’s VNode andthe VNodes of its children have updated.

似乎应该触发componentUpdated

我做错了什么吗?还是误解了什么?

在下面的演示中,点击 Click Me! 按钮然后你会看到 componentUpdated 没有被调用。

但是当点击change data时(执行与click me!类似的行为,不同的是它改变了父组件的数据),它会正确触发。

非常感谢。

Vue.config.productionTip = false
Vue.component('child', {
template: `<div>{{point}}
<span style="background-color:gray;font-weight:bold;color:red">
-{{mytest}}
</span>
<button @click="plusOne()">Click me!</button>
</div>`,
props: ['point'],
data(){
return {
mytest: 1
}
},
updated: function () {
console.log('updated component=child')
},
methods: {
plusOne() {
this.mytest += 1
}
}
})

let vMyDirective = {}
vMyDirective.install = function install (Vue) {

Vue.directive('my-directive', {
inserted: function () {
console.log('!!!directive for inserted')
},
bind: function bind (el, binding, vnode) {
console.log('!!!directive for bind')
},
componentUpdated: function componentUpdated (el, binding, vnode) {
console.log('!!!directive for component updated')
},
update: function () {
console.log('!!!directive for update')
}
})
}

Vue.use(vMyDirective)

new Vue({
el: '#app',
data() {
return {
testValues: ['label a', 'label b'],
testIndex: 1
}
},
methods:{
pushArray: function() {
this.testValues.push('label c')
},
changeData: function () {
this.testIndex += 1
}
}
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.16/vue.js"></script>
<div id="app">
<button v-on:click="pushArray()">Add one Child!!!</button>
<button v-on:click="changeData()">Change Data - {{testIndex}}</button>
<div v-my-directive>
<child v-for="(item, index) in testValues" :key="index" :point="item"></child>
</div>
</div>

最佳答案

基于 Vue Team Feedback ,这不是hook=componentUpdated上的一个问题,这是我对单词的误解。

hook=comopnentUpdated触发的前提是指令绑定(bind)的VNode已经改变。这意味着如果只有子 VNode 发生变化,Vue 可能不会像@Jacob Goh 在评论中所说的那样捕获它(仅以一种方式流动)。

所以 componentUpdated 并不意味着它会检测子组件是否更新,它只意味着何时 将被触发。

关于javascript - Hook=componentUpdated of Vue 指令未触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50634762/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com