Conditional Rendering in Vue with v-if
Jul 4, 2019
The v-if directive allows you to conditionally render a block. It differs from v-show in that v-if doesn't actually create the element if its expression evaluates to false.
const app = new Vue({
data: () => ({ render: false }),
template: `
<div>
<h1 v-if="render">Hello, World</h1>
</div>
`
});
// Vue will **not** render 'Hello, World' because the `v-if`
// expression evaluates to false.
const data = await renderToString(app);
// <div data-server-rendered="true"><!----></div>
data;
v-else-if and v-else
Vue also has v-else-if and v-else directives that behave like else if and else in JavaScript.
const app = new Vue({
data: () => ({ value: 1 }),
template: `
<div>
<div v-if="value > 0">Positive</div>
<div v-else-if="value < 0">Negative</div>
<div v-else>Zero</div>
</div>
`
});
let data = await renderToString(app);
// <div data-server-rendered="true"><div>Positive</div></div>
data;
app._data.value = -1;
data = await renderToString(app);
// <div data-server-rendered="true"><div>Negative</div></div>
data;
app._data.value = 0;
data = await renderToString(app);
// <div data-server-rendered="true"><div>Zero</div></div>
data;
Lifecycle Hooks
Vue components have lifecycle hooks, like the created hook that gets called when the component gets created, and mounted when the component gets mounted.
When Vue renders a component because the v-if expression became
truthy, it triggers both the 'created' and 'mounted' hooks. For example,
the below code will print both 'Created!' and 'Mounted!' every time
display changes to true from false.
Vue.component('test', {
created: function() {
console.log('Created!');
},
mounted: function() {
console.log('Mounted!');
},
template: '<h1>Hello World</h1>'
});
const app = new Vue({
data: () => ({ display: false }),
template: `
<div id="rendered-content">
<test v-if="display"></test>
<div>
<button v-on:click="display = !display">Toggle</button>
</div>
</div>
`
});
Vue School has some of our favorite Vue
video courses. Their Vue.js Master Class walks you through building a real
world application, and does a great job of teaching you how to integrate Vue
with Firebase.
Check it out!
Did you find this tutorial useful? Say thanks by starring our repo on GitHub!