I'm using [email protected] and the vue official webpack template to build an app.
When developing locally, I often see the warning Uncaught TypeError: Cannot read property ... of undefined
, but the HTML can be rendered successfully. However, the HTML can't be rendered when it's deployed to Netlify with npm run build
command. So I have to treat this warning seriously.
I learned from here that it's because "the data is not complete when the component is rendered, but e.g. loaded from an API." and the solution is to "use v-if
to render that part of the template only once the data has been loaded."
There are two questions:
v-if
around multiple statements that's generating the warning but personal I think this solution is verbose. Is there a neat approach?Just use v-if
on a common parent to all the elements in your template relying on that AJAX call, not around each one.
So instead of something like:
<div> <h1 v-if="foo.title">{{ foo.title }}</h1> <p v-if="foo.description">{{ foo.description }}</p> </div>
Do
<div> <template v-if="foo"> <h1>{{ foo.title }}</h1> <p>{{ foo.description }}</p> </template> </div>
have you tried to initialize all the data you need? e.g. if you need a
b
c
, you can do:
new Vue({ data: { a: 1, b: '', c: {} }, created(){ // send a request to get result, and assign the value to a, b, c here } })
In this way you wont get any xx is undefined
error
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With