Reactive Data — Vue

Vue 3 Composition API menyediakan dua cara membuat data reaktif: ref() — Untuk Nilai Primitif const count = ref(0) const name = ref("Budi") // Akses/ubah di…

Data reaktif adalah data yang diawasi Vue: begitu nilainya berubah, bagian tampilan yang membacanya ikut diperbarui. Bayangin dapur Warung Bu Sri. Koki selalu melihat papan pesanan di dinding. Kalau pelayan menulis "Es Teh × 2" di papan itu, koki langsung tahu. Kalau pelayan cuma mencatatnya di buku saku sendiri, koki gak pernah tahu ada perubahan. Di Vue, kokinya Vue, papannya data reaktif, dan buku saku itu variabel biasa.

🧪 Tebakan cepat: Script berisi let jumlah = 1, dan tombol +1 menjalankan jumlah++ lalu console.log(jumlah). Sesudah tiga klik, console mencetak 4. Layarnya menampilkan berapa? Tebak dulu, jawabannya ada di bagian "Kenapa variabel biasa gak cukup".

Kenapa variabel biasa gak cukup

let jumlah = 1

function tambah() {
  jumlah++
  console.log("jumlah:", jumlah)
}

---template---
<p>Es Teh × {{ jumlah }}</p>
<button @click="tambah">+1</button>
Kejadian Console Layar
Halaman tampil Es Teh × 1
Klik +1 jumlah: 2 Es Teh × 1
Klik +1 jumlah: 3 Es Teh × 1
Klik +1 jumlah: 4 Es Teh × 1

Layarnya tetap 1. Itu jawaban tebakannya. Variabelnya memang naik, console buktinya, tapi gak ada yang memberi tahu Vue. Vue gak merender ulang, jadi <p> tetap menampilkan nilai waktu halaman pertama tampil.

ref(): kotak yang diawasi Vue

const jumlah = ref(1)

function tambah() {
  jumlah.value++
  console.log("jumlah:", jumlah.value)
}

---template---
<p>Es Teh × {{ jumlah }}</p>
<button @click="tambah">+1</button>
Kejadian jumlah.value Layar
Halaman tampil 1 Es Teh × 1
Klik +1 2 Es Teh × 2
Klik +1 3 Es Teh × 3

reactive(): object yang diawasi langsung

const keranjang = reactive({ menu: "Es Teh", jumlah: 1 })

function tambah() {
  keranjang.jumlah++
}

---template---
<p>{{ keranjang.menu }} × {{ keranjang.jumlah }}</p>
<button @click="tambah">+1</button>

ref atau reactive?

ref() reactive()
Isinya apa saja object atau array
Di script jumlah.value keranjang.jumlah
Di template {{ jumlah }} {{ keranjang.jumlah }}
Diganti seluruhnya aman: jumlah.value = 5 putus dari tampilan
Dibongkar gak perlu putus, kecuali lewat toRefs

Dokumentasi Vue menyarankan ref() sebagai pilihan utama, karena aturannya satu dan berlaku untuk semua jenis data. reactive() cocok untuk object yang diubah per properti.

⚠️ Jebakan yang sering ketemu

TL;DR: Data yang mengubah tampilan harus reaktif, karena variabel biasa berubah tanpa Vue tahu dan layarnya diam. const jumlah = ref(1) membuat kotak yang diawasi Vue: di script baca dan ubah lewat jumlah.value, di template cukup {{ jumlah }}. console.log(nama.value) mencetak isinya. reactive({ ... }) cuma untuk object, propertinya diakses tanpa .value, dan jangan dibongkar dengan let { jumlah } = ... atau diganti seluruhnya, karena sambungannya ke tampilan putus. Kalau ragu, pakai ref().

Yang akan kamu pelajari