'Watch props change on vuejs
I want to use watch for a props on a child component, but it's not working.
Here is my code :
props: {
searchStore: {
type: Object
}
},
watch: {
searchStore(newValue) {
alert('yolo')
console.log(newValue)
}
And it's unfortunately not working
I've looked on this post and tried everything and nothing work : VueJs 2.0 - how to listen for `props` changes
I checked my props with Vue Devtools and it's changing.
Thanks in advance to the community !
Solution 1:[1]
based on that code, it should work, so the issue may be somewhere else. Can you post more code?
if you want to run immediately, you can use immediate
. This is the syntax:
watch: {
searchStore: {
immediate: true,
deep: true,
handler(newValue, oldValue) {
}
}
},
The deep: true
setting will deep-watch for a change within the object.
When you are updating parts of this object in the parent component, make sure you use Vue's $set
function.
this.$set(this.searchStore, 'myKey', {price: 12.22});
further reading: https://v2.vuejs.org/v2/guide/reactivity.html#Change-Detection-Caveats
Solution 2:[2]
Could be that 'searchStore' wasn't changing?
Since its an object, vue is watching for a new reference of an object to be passed.
Meaning (will not trigger watch):
roorSearchStore.a= newVal
will not trigger the watch (since the reference didn't change).
You could watch deep like Daniel says, Or do Object.assign like this:
rootSearchStore = Object.assign ({},roorSearchStore,{a:newVal}).
Or try to watch a timestamp of the changes in rootSearchStore .
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | Valentine Shi |
Solution 2 | Yaniv Peretz |