'How to evaluate Vue.js component props in the data property?
I have 2 components: Post
and Comments
.
Inside Post component, there is Comments component that has 3 props: postId
, numCom
(number of comments) and comments
(array).
I get comments and I pass the array with props, and now I want to retrieve the array in Comments component and add it to data so I can then add/remove comments etc.
Here is my code in Comments.vue
:
props: ['id', 'numCom', 'comments'],
data: function() {
return {
newMessage: "",
loading: false,
allComments: this.comments,
num: this.numCom,
}
},
But this doesn't works. In Vue developer tools I can see that comments
prop is filled with comments, but allComments
array is empty.
What should I do?
Solution 1:[1]
It looks like the comments
prop does not have a value at the time of the component's creation (which is the only time allComments
will be set).
You can either:
- Defer the creation of the component until the
comments
prop is ready by usingv-if
like this:
<comments v-if="comments" :comments="comments"></comments>
- Watch for changes to the
comments
prop and setallComments
to the new value (in addition to initializingallComments
in the data function):
watch: {
comments(value) {
this.allComments = value;
}
}
Solution 2:[2]
Use computed properties
computed: {
allComments () {
return this.comments
}
}
Solution 3:[3]
You dont need to put the props into data, just use this[propName]
to get the value.
If you want to change a prop value or key to another value,just use computed
to change it.
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 | Decade Moon |
Solution 2 | Florin Miu |
Solution 3 | radiorz |