Sintaxe de Template
Texto e Expressões
{{ message }} {{ count + 1 }} {{ ok ? 'Yes' : 'No' }}
Diretivas
{{ expr }}Interpolação de texto
v-bind:attr / :attrVincular atributo à expressão
v-on:event / @eventAdicionar ouvinte de evento
v-modelVinculação bidirecional (formulários)
v-if / v-else-if / v-elseRenderização condicional
v-showAlternar CSS de exibição (permanece no DOM)
v-forRenderização de lista
v-slot / #nameConteúdo de slot nomeado
Vinculação de Atributos
Reatividade
ref (Primitivos)
import { ref } from 'vue' const count = ref(0) console.log(count.value) // 0 count.value++ // reactive update
reactive (Objetos)
import { reactive } from 'vue' const state = reactive({ count: 0, name: 'Vue' }) state.count++ // no .value needed
ref vs reactive
ref()Qualquer tipo; acessar via .value no script
reactive()Apenas objetos/arrays; acesso direto às propriedades
TemplateAmbos se desempacotar automaticamente (sem .value)
Destructurereactive perde reatividade; usar toRefs()
Computed e Watchers
Propriedades Computed
import { ref, computed } from 'vue' const items = ref([1, 2, 3, 4, 5]) const evenItems = computed(() => items.value.filter(n => n % 2 === 0) )

Valores computed são armazenados em cache e reavaliados apenas quando as dependências mudam

Watchers
import { ref, watch, watchEffect } from 'vue' const query = ref('') // Watch specific source watch(query, (newVal, oldVal) => { console.log(`Changed: ${oldVal} → ${newVal}`) }) // Auto-track dependencies watchEffect(() => { console.log(`Query is: ${query.value}`) })
Opções de Watch
immediate: trueExecutar callback imediatamente ao criar
deep: trueObservar objetos aninhados profundamente
flush: 'post'Executar após atualização do DOM
once: trueDisparar apenas uma vez e parar
Componentes
Componente de Arquivo Único (SFC)
Registrando Componentes
Blocos SFC
<script setup>Composition API (recomendado)
<template>Template HTML
<style scoped>CSS com escopo do componente
<style module>CSS Modules (objeto $style)
Props e Eventos
Definindo Props
Emitindo Eventos
Uso no Pai
v-model em Componentes
Slots
Slot Padrão

Custom content here

Slots Nomeados

Main content

Slots com Escopo
Composition API
Função Composable
// useMouse.js import { ref, onMounted, onUnmounted } from 'vue' export function useMouse() { const x = ref(0) const y = ref(0) function update(e) { x.value = e.pageX y.value = e.pageY } onMounted(() => window.addEventListener('mousemove', update)) onUnmounted(() => window.removeEventListener('mousemove', update)) return { x, y } }
Usando Composables
provide / inject
// Parent import { provide, ref } from 'vue' const theme = ref('dark') provide('theme', theme) // Descendant (any depth) import { inject } from 'vue' const theme = inject('theme', 'light') // default
Router (Vue Router)
Definições de Rota
import { createRouter, createWebHistory } from 'vue-router' const router = createRouter({ history: createWebHistory(), routes: [ { path: '/', component: Home }, { path: '/about', component: About }, { path: '/user/:id', component: User }, ] })
Navegação no Template
Home User 1
Navegação Programática
import { useRouter, useRoute } from 'vue-router' const router = useRouter() const route = useRoute() router.push('/about') router.push({ name: 'user', params: { id: 1 } }) console.log(route.params.id)
Recursos de Rota
/user/:idSegmento dinâmico (route.params.id)
name: 'user'Rota nomeada para navegação programática
children: [...]Rotas aninhadas
beforeEnterGuarda de navegação por rota
meta: { auth: true }Metadados personalizados para guardas
redirect: '/new-path'Redirecionamento de rota
Hooks de Ciclo de Vida
Ordem dos Hooks
onBeforeMountAntes da renderização inicial do DOM
onMountedDOM pronto (buscar dados, adicionar ouvintes)
onBeforeUpdateAntes do estado reativo rerenderizar o DOM
onUpdatedApós rerenderização do DOM
onBeforeUnmountAntes do componente ser destruído
onUnmountedLimpeza (remover ouvintes, timers)
Uso
Listas e Condicionais
v-for
  • {{ item.name }}
  • {{ index }}: {{ item.name }}
  • {{ key }}: {{ val }}

    Sempre usar :key com v-for para atualizações eficientes do DOM

    v-if vs v-show
    v-ifRenderizar condicionalmente (adicionar/remover do DOM)
    v-else-ifCadeia else-if
    v-elseRamo de fallback
    v-showAlternar display: none (permanece no DOM)

    Usar v-show para alternâncias frequentes, v-if para mudanças raras

    Exemplo de Condicionais
    Loading...
    Error!
    {{ data }}
    Manipulação de Formulários
    Básico de v-model
    Modificadores de v-model
    v-model.lazySincronizar em change em vez de input
    v-model.numberAuto-converter para número
    v-model.trimAuto-remover espaços em branco
    Modificadores de Evento
    @click.preventChamar preventDefault()
    @click.stopChamar stopPropagation()
    @click.onceDisparar no máximo uma vez
    @keyup.enterApenas na tecla Enter
    @submit.preventPrevenir envio padrão do formulário