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!