logo hsb.horse
← Retour au blog

Blog

Considérez les modèles de stratégie lorsque les branches v-if augmentent dans Vue

Lorsqu'il existe au moins trois modèles de branchement conditionnel utilisant v-if, envisagez de mettre en œuvre un modèle de stratégie pour changer dynamiquement de composants. Lisibilité et maintenabilité améliorées.

Publié:

Il est souvent utilisé dans React, mais il peut également être réalisé correctement dans Vue.

Points principaux

  • Considérez les modèles comme étant définis par des chaînes
    • Exemple : état de la communication API : pending | resolve | reject
    • Exemple : distribution d’icônes SNS : twitter | facebook | instagram | github | line
  • Créer des composants pour chaque modèle

mise en œuvre

<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>

Points

  • Mappage d’objets : mappage des chaînes de modèles et des composants
  • Composant dynamique : commuté dynamiquement avec <component :is="...">
  • Type Safety : définissez des modèles dans TypeScript avec Union Type

résumé

Si trois modèles de branchement ou plus apparaissent dans v-if, envisagez un modèle de stratégie.

Les composants dynamiques rendent les modèles plus propres et facilitent l’ajout de nouveaux modèles.