logo hsb.horse
← Voltar para o índice do blog

Blog

Considere padrões de estratégia quando as ramificações v-if aumentam no Vue

Quando houver três ou mais padrões de ramificação condicional usando v-if, considere implementar um padrão de estratégia para alternar componentes dinamicamente. Melhor legibilidade e capacidade de manutenção.

Publicado:

É frequentemente usado no React, mas também pode ser alcançado corretamente no Vue.

Pontos principais

  • Pense nos padrões como sendo definidos por strings
    • Exemplo: status de comunicação da API: pending | resolve | reject
    • Exemplo: distribuição de ícones SNS: twitter | facebook | instagram | github | line
  • Crie componentes para cada padrão

implementação

<script setup lang="ts">
import { computed, ref } from 'vue';
import TwitterIcon from './TwitterIcon.vue';
import FacebookIcon from './FacebookIcon.vue';
import InstagramIcon from './InstagramIcon.vue';
type IconType = "twitter" | "facebook" | "instagram";
const icons = {
twitter: TwitterIcon,
facebook: FacebookIcon,
instagram: InstagramIcon;
}
const iconType = ref<IconType>("twitter");
const currentIconComponent = computed(() => {
return icons[iconType.value]
})
// function showTwitterIcon
// function showFacebookIcon
// function showInstagramIcon
</script>
<template>
<div class="flex gap-1 m-4">
<button @click="showTwitterIcon">Twitter</button>
<button @click="showFacebookIcon">Facebook</button>
<button @click="showInstagramIcon">Instagram</button>
</div>
<component :is="currentIconComponent" />
</template>

Pontos

  • Mapeamento de objetos: mapeamento de strings e componentes de padrão
  • Componente dinâmico: comutado dinamicamente com <component :is="...">
  • Type Safety: Defina padrões em TypeScript com Union Type

resumo

Se três ou mais padrões de ramificação ocorrerem em v-if, considere um padrão de estratégia.

Os componentes dinâmicos tornam os modelos mais limpos e fáceis de adicionar novos padrões.