hyf0/criar-composavel-adaptavel

Crie um composable Vue de nível de biblioteca que aceita entradas talvez reativas (MaybeRef / MaybeRefOrGetter), permitindo que os chamadores passem um valor simples, ref ou getter. Normalize as entradas com toValue()/toRef() dentro de efeitos reativos (watch/watchEffect) para manter o comportamento previsível e reativo. Use esta habilidade quando o usuário pedir para criar composáveis adaptáveis ou reutilizáveis.

O que é criar-composavel-adaptavel?

Esta habilidade orienta a criação de composables Vue de nível de biblioteca que são adaptáveis a diferentes formas de entrada reativa, como MaybeRef e MaybeRefOrGetter. Ela é útil para desenvolvedores que desejam criar funções reutilizáveis que aceitam valores simples, refs ou getters, normalizando essas entradas com toValue() e toRef() dentro de efeitos reativos (como watch e watchEffect) para garantir comportamento previsível e totalmente reativo. A habilidade suporta Vue 3 e é baseada em padrões de design de VueUse, sendo ideal para construir APIs de composables flexíveis e amigáveis para bibliotecas. O processo envolve estruturar a função para detectar reatividade, usar watchEffect para efetivar efeitos colaterais com base na fonte reativa normalizada, e fornecer dicas de TypeScript para tipos de parâmetro e retorno adequados.

Funciona com~Claude Code~Codex CLI~Cursor
Part ofReact
npx skills add https://github.com/hyf0/vue-skills/tree/main/skills/create-adaptable-composable

Installed? Explore more Programação e Desenvolvimento skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

O que criar-composavel-adaptavel faz?

Crie um composable Vue de nível de biblioteca que aceita entradas talvez reativas (MaybeRef / MaybeRefOrGetter), permitindo que os chamadores passem um valor simples, ref ou getter. Normalize as entradas com toValue()/toRef() dentro de efeitos reativos (watch/watchEffect) para manter o comportamento previsível e reativo. Use esta habilidade quando o usuário pedir para criar composáveis adaptáveis ou reutilizáveis.

Visão Geral

Esta habilidade ajuda a criar composables Vue que seguem as melhores práticas para aceitar entradas flexíveis. É especialmente útil ao construir bibliotecas de composables que precisam ser amigáveis ao usuário e reativas.

Quando Usar

  • Quando o usuário pedir para criar um composable que aceite valores estáticos ou reativos.
  • Quando o usuário mencionar MaybeRef ou MaybeRefOrGetter.
  • Ao projetar APIs de composables reutilizáveis.

Passos

  1. Entender o comportamento desejado do composable.
  2. Identificar parâmetros que devem aceitar entradas talvez reativas.
  3. Usar MaybeRef<T> ou MaybeRefOrGetter<T> nos tipos dos parâmetros de entrada.
  4. Dentro do composable, detectar se a entrada é reativa usando toRef() ou toValue().
    • Use toRef() para rastreamento de reatividade contínuo dentro de watchEffect.
    • Use toValue() para obter o valor atual sem rastreamento (seguindo Vue 3.3+).
  5. Criar um efeito com watch ou watchEffect para realizar a lógica reativa principal.
  6. Retornar um objeto com ref ou computed para expor o resultado de forma reativa.

Exemplo

import { ref, watchEffect, toValue, type MaybeRefOrGetter } from 'vue'

export function useContador(valorInicial: MaybeRefOrGetter<number>) {
  const contagem = ref(0)

  watchEffect(() => {
    contagem.value = toValue(valorInicial)
  })

  function incrementar() {
    contagem.value++
  }

  return { contagem, incrementar }
}

Dicas de TypeScript

  • Use MaybeRef<T> para aceitar T | Ref<T>.
  • Use MaybeRefOrGetter<T> para aceitar T | Ref<T> | (() => T).
  • Considere usar genéricos para retornar o tipo correto.

Próximos Passos

Depois de escrever o composable, teste-o com diferentes formas de entrada:

  • Valor estático: useContador(5)
  • Ref: const ref = ref(10); useContador(ref)
  • Getter: useContador(() => someCondition.value ? 10 : 20)

Individual skills in this repo

This repo contains 7 individual skills — each has its own dedicated page.

Habilidades Relacionadas