🎯 O que são Composables?

Composables são funções criadas para organizar e reutilizar a lógica de forma modular dentro da Composition API. Eles permitem que você extraia a lógica de componentes e compartilhe-a em diferentes partes da aplicação.


🔹 Como criar um Composable?

Um composable é uma função JavaScript que usa recursos da Composition API (como ref, reactive, computed, entre outros).

Exemplo de um composable simples:

// useContador.js
import { ref } from 'vue'

export function useContador() {
  const contador = ref(0)

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

  const resetar = () => {
    contador.value = 0
  }

  return {
    contador,
    incrementar,
    resetar
  }
}

🔹 Como usar um Composable dentro de um componente?

Após criar o composable, você pode utilizá-lo em qualquer componente da aplicação. Basta importá-lo e chamá-lo dentro do setup() do componente.

Exemplo de componente usando o composable:

<template>
  
    Contador: {{ contador }}
     @click="incrementar">Incrementar
     @click="resetar">Resetar
  
template>

<script>
import { useContador } from './useContador'

export default {
  setup() {
    const { contador, incrementar, resetar } = useContador()

    return { contador, incrementar, resetar }
  }
}
script>

🔹 Por que usar Composables?

  • Reusabilidade: Crie uma lógica em um único lugar e use-a em vários componentes.
  • Legibilidade: Mantenha os componentes mais limpos e organizados.
  • Manutenção: Facilite a manutenção e refatoração do código.
  • Testabilidade: Teste composables de forma isolada.

🔹 Exemplo Avançado: Composables com watch e computed

Você pode utilizar hooks como watch e computed dentro dos composables para criar comportamentos mais complexos.

Exemplo com watch e computed:

// useDados.js
import { ref, computed, watch } from 'vue'

export function useDados() {
  const nome = ref('')
  const idade = ref(0)

  // Computed para calcular a idade em 10 anos
  const idadeFutura = computed(() => idade.value + 10)

  // Watch para monitorar mudanças no nome
  watch(nome, (novoNome, nomeAntigo) => {
    console.log(`Nome mudou de ${nomeAntigo} para ${novoNome}`)
  })

  return {
    nome,
    idade,
    idadeFutura
  }
}

Como usar esse composable dentro de um componente?

<template>
  
    Nome:  v-model="nome" />
    Idade:  v-model="idade" type="number" />
    Idade em 10 anos: {{ idadeFutura }}
  
template>

<script>
import { useDados } from './useDados'

export default {
  setup() {
    const { nome, idade, idadeFutura } = useDados()

    return { nome, idade, idadeFutura }
  }
}
script>

Composables e a Reatividade

Os composables podem ser usados para encapsular a lógica reativa. Você pode usar ref, reactive, computed, e watch para gerenciar dados dinâmicos e reativos dentro de funções reutilizáveis.


📝 Resumo Rápido

Característica Descrição
O que são Composables Funções reutilizáveis que encapsulam lógica reativa e comportamentos dinâmicos.
Vantagens Reusabilidade, manutenção facilitada, legibilidade e testabilidade.
Como Usar Crie funções utilizando hooks como ref, computed, e watch, e utilize-as em qualquer componente.

🚀 Dica Final

Composables são poderosos porque permitem abstrair lógica e compartilhá-la em toda a sua aplicação, sem necessidade de duplicar código ou depender de mixins, como acontecia nas versões anteriores do Vue.

Se quiser criar uma aplicação mais escalável e modular, sempre que tiver alguma lógica complexa ou que se repete em múltiplos componentes, pense em criar um composable para ela.