Conditional Rendering — Vue

v-if / v-else const isLoggedIn = ref(true) ---template--- Selamat datang! Silakan login. v-else-if const score = ref(85) ---template--- A B C D v-show const…

Conditional rendering artinya menampilkan sebagian template hanya kalau sebuah syarat terpenuhi. Bayangin dinding menu Warung Bu Sri. Waktu Mie Ayam habis, Bu Sri bisa melakukan dua hal: mencopot kartu Mie Ayam dari dinding lalu menggantungkan kartu "Habis", atau membiarkan kartunya tergantung tapi menutupinya dengan kain. Di Vue, mencopot kartu itu v-if, menutup dengan kain itu v-show.

🧪 Tebakan cepat: Stok Mie Ayam 0. Template berisi <p v-if="stok > 0">Tersedia (v-if)</p> dan <p v-show="stok > 0">Tersedia (v-show)</p>. Kalau kamu buka DevTools, ada berapa <p> di DOM? Tebak dulu, jawabannya ada di bagian "v-if atau v-show".

v-if dan v-else: pilih satu dari dua

const stok = ref(0)

---template---
<h3>Mie Ayam</h3>
<p v-if="stok > 0">Tersedia: {{ stok }} porsi</p>
<p v-else>Habis</p>
stok Hasil render di DOM
0 <h3>Mie Ayam</h3><p>Habis</p>
5 <h3>Mie Ayam</h3><p>Tersedia: 5 porsi</p>

v-else-if: lebih dari dua cabang

const stok = ref(3)

---template---
<p v-if="stok >= 10">Masih banyak</p>
<p v-else-if="stok > 0">Tinggal {{ stok }} porsi</p>
<p v-else>Habis</p>
stok Cabang yang dipasang
12 Masih banyak
3 Tinggal 3 porsi
0 Habis

Satu syarat untuk beberapa elemen: <template v-if>

const stok = ref(3)

---template---
<template v-if="stok > 0">
  <p>Tersedia: {{ stok }} porsi</p>
  <button>Pesan</button>
</template>
<p v-else>Habis</p>

v-if atau v-show

const stok = ref(0)

---template---
<p v-if="stok > 0">Tersedia (v-if)</p>
<p v-show="stok > 0">Tersedia (v-show)</p>

Hasil render dengan stok 0:

<!--v-if-->
<p style="display: none;">Tersedia (v-show)</p>

Cuma satu <p>, dan itu milik v-show. Itu jawaban tebakannya. v-if gak membuat elemennya sama sekali. Vue cuma meninggalkan komentar sebagai penanda tempat: <!--v-if--> di build development, <!----> di build production seperti Playground. v-show selalu membuat elemennya, lalu menyembunyikannya dengan CSS display: none.

v-if v-show
Syaratnya salah elemen gak ada di DOM elemen ada, display: none
Syaratnya berganti elemen dibuang, lalu dibuat ulang cuma display-nya diganti
Ketikan di input di dalamnya hilang tetap
Dipasangkan dengan v-else atau <template> bisa gak bisa
Cocok untuk jarang berganti, atau cuma untuk sebagian orang sering bolak-balik, misalnya tab

⚠️ Jebakan yang sering ketemu

TL;DR: v-if="syarat" memasang elemen hanya saat syaratnya benar; saat salah, elemennya gak ada di DOM. v-else-if dan v-else menyusul dalam satu rantai, wajib nempel tepat sesudahnya, dan cuma cabang pertama yang benar yang dipasang. <template v-if> membungkus beberapa elemen tanpa ikut dirender. v-show selalu membuat elemennya dan menyembunyikannya dengan display: none, jadi isinya bertahan dan cocok untuk yang sering bolak-balik, tapi gak bisa dipasangkan dengan v-else. Jadi v-if="false" menghapus elemen, v-show="false" menyembunyikannya.

Yang akan kamu pelajari