Carregando...

Composition API

O Composition API no Vue.js é uma abordagem moderna para estruturar a lógica de componentes de forma mais modular e reutilizável. Diferente do Options API, que organiza propriedades e métodos em blocos separados, o Composition API concentra o estado, métodos e efeitos colaterais dentro da função setup(), permitindo maior clareza e escalabilidade em aplicações complexas. Esta abordagem é especialmente útil em projetos grandes, onde a reutilização de lógica entre componentes se torna essencial.
Ao utilizar o Composition API, os desenvolvedores podem explorar conceitos avançados de Vue.js, como reatividade com ref e reactive, propriedades derivadas com computed, e observação de mudanças com watch. Além disso, é possível implementar algoritmos eficientes, estruturas de dados complexas e princípios de programação orientada a objetos (OOP) diretamente dentro do setup(), promovendo um código mais organizado e testável.
Neste tutorial, você aprenderá a gerenciar estado reativo, criar funções reutilizáveis (Composables), otimizar desempenho e evitar armadilhas comuns, como vazamentos de memória e manipulação inadequada de dados. O conteúdo é contextualizado dentro do desenvolvimento de software e arquitetura de sistemas, permitindo que você aplique estas técnicas de forma prática em projetos reais de Vue.js.

Exemplo Básico

text
TEXT Code
import { createApp, ref, computed } from 'vue'

const App = {
setup() {
const contador = ref(0)

const incrementar = () => {
contador.value++
}

const contadorDobrado = computed(() => contador.value * 2)

return {
contador,
incrementar,
contadorDobrado
}

},
template: `     <div>       <h1>Contador: {{ contador }}</h1>       <h2>Contador Dobrado: {{ contadorDobrado }}</h2>       <button @click="incrementar">Incrementar</button>     </div>
`
}

createApp(App).mount('#app')

Neste exemplo, setup() é o ponto central do Composition API. O contador é definido como uma referência reativa usando ref, permitindo que seu valor seja atualizado e refletido automaticamente no template. A função incrementar altera o estado de contador, enquanto contadorDobrado é uma propriedade computada que recalcula automaticamente o valor dobrado sempre que contador muda.
O return dentro do setup() expõe essas variáveis e funções para o template, demonstrando a modularidade e a clareza que o Composition API proporciona. É importante entender o uso de .value para acessar ou modificar refs, bem como a diferença entre ref e reactive para objetos complexos. Este padrão promove código testável, reutilizável e fácil de manter em aplicações Vue.js de grande escala.

Exemplo Prático

text
TEXT Code
import { createApp, reactive, watch } from 'vue'

const App = {
setup() {
const estado = reactive({
tarefas: [],
novaTarefa: ''
})

const adicionarTarefa = () => {
if (estado.novaTarefa.trim() !== '') {
estado.tarefas.push({ texto: estado.novaTarefa, concluida: false })
estado.novaTarefa = ''
}
}

watch(() => estado.tarefas.length, (novo, antigo) => {
console.log(`Número de tarefas mudou: ${antigo} → ${novo}`)
})

const removerTarefa = (indice) => {
estado.tarefas.splice(indice, 1)
}

return {
estado,
adicionarTarefa,
removerTarefa
}

},
template: `     <div>       <h1>Lista de Tarefas</h1>       <input v-model="estado.novaTarefa" placeholder="Adicionar nova tarefa" />       <button @click="adicionarTarefa">Adicionar</button>       <ul>         <li v-for="(tarefa, indice) in estado.tarefas" :key="indice">
{{ tarefa.texto }}           <button @click="removerTarefa(indice)">Remover</button>         </li>       </ul>     </div>
`
}

createApp(App).mount('#app')

Este exemplo demonstra gerenciamento de tarefas dinâmicas com reactive, permitindo que o objeto estado seja reativo. As funções adicionarTarefa e removerTarefa manipulam o array de tarefas com validação adequada, evitando inconsistências. O watch observa mudanças no tamanho do array e registra no console, demonstrando execução de efeitos colaterais reativos.
Este padrão segue princípios de OOP e modularidade, permitindo futura extração para Composables. Evita manipulação direta do DOM e garante que watch seja limpo corretamente para prevenir vazamentos de memória, alinhando-se às melhores práticas de Vue.js em performance e manutenção.

Melhores práticas incluem escolher corretamente entre ref e reactive, usar computed e watch de forma segura, e tratar erros com try/catch dentro do setup(). Para depuração, Vue Devtools é essencial. Para otimização de performance, use lazy evaluation e evite operações pesadas dentro de watch ou computed. Segurança do estado e validação de entrada de usuários são importantes para prevenir bugs e inconsistências em aplicações Vue.js complexas.

📊 Tabela de Referência

Vue.js Element/Concept Description Usage Example
ref Define uma variável reativa simples const count = ref(0)
reactive Define um objeto ou array reativo const estado = reactive({ nome: '', idade: 0 })
computed Propriedade derivada reativa const dobro = computed(() => count.value * 2)
watch Observa mudanças e executa efeitos colaterais watch(() => estado.tarefas.length, (novo) => console.log(novo))
setup Função central do Composition API setup() { const data = ref(0); return { data } }

O Composition API permite gerenciar de forma eficiente a reatividade, propriedades computadas e observação de mudanças, promovendo componentes escaláveis, limpos e reutilizáveis. Próximos passos incluem criação de Composables, integração com Pinia para gerenciamento de estado, e exploração de async setup e suspense para padrões avançados. Documentação oficial e projetos open-source oferecem recursos valiosos para aprendizado contínuo.

🧠 Teste Seu Conhecimento

Pronto para Começar

Teste Seu Conhecimento

Desafie-se com este questionário interativo e veja o quão bem você entende o tópico

4
Perguntas
🎯
70%
Para Passar
♾️
Tempo
🔄
Tentativas

📝 Instruções

  • Leia cada pergunta cuidadosamente
  • Selecione a melhor resposta para cada pergunta
  • Você pode refazer o quiz quantas vezes quiser
  • Seu progresso será mostrado no topo