VuVue · Lesson 7 of 7

Vue Cheatsheet

Composition API, template syntax, and reactivity on one page.

HTML
<script setup>
import { ref, reactive, computed, watch, onMounted } from 'vue'

// ── Reactivity ──────────────────────────
const count = ref(0)               // .value in script, bare in template
const user = reactive({ name: 'Ada' })
const double = computed(() => count.value * 2)

watch(count, (now, prev) => console.log(now))
watch(() => user.name, n => {})    // watch a property
onMounted(() => {})                // lifecycle

// ── Props & events ──────────────────────
const props = defineProps({ title: String, n: { type: Number, default: 0 } })
const emit = defineEmits(['save'])
emit('save', payload)
const model = defineModel()        // v-model made easy
</script>

<template>
  <!-- ── Template syntax ─────────────── -->
  <h1>{{ count }} / {{ double }}</h1>
  <button @click="count++">add</button>
  <input v-model="user.name" />

  <div v-if="count > 5">big</div>
  <div v-else-if="count > 0">small</div>
  <div v-else>zero</div>
  <p v-show="visible">toggles CSS only</p>

  <li v-for="item in items" :key="item.id">{{ item.name }}</li>

  <img :src="url" :alt="desc" />          <!-- bind attrs -->
  <div :class="{ active: isOn }" :style="{ color }" />
  <input @keyup.enter="save" />            <!-- modifiers -->
  <slot />                                 <!-- children -->
</template>
JavaScript
// ── Composables — Vue's reusable logic ──
// useMouse.js
import { ref, onMounted, onUnmounted } from 'vue'
export function useMouse() {
  const x = ref(0), y = ref(0)
  const update = e => { x.value = e.pageX; y.value = e.pageY }
  onMounted(() => addEventListener('mousemove', update))
  onUnmounted(() => removeEventListener('mousemove', update))
  return { x, y }
}
// any component:  const { x, y } = useMouse()

// ── Pinia store (state management) ──────
export const useCart = defineStore('cart', () => {
  const items = ref([])
  const total = computed(() =>
    items.value.reduce((s, i) => s + i.price, 0))
  function add(item) { items.value.push(item) }
  return { items, total, add }
})

// ── Router essentials ───────────────────
// <RouterLink to="/about">  <RouterView />
// const route = useRoute()   route.params.id
// const router = useRouter() router.push('/home')