logo hsb.horse
← 블로그 목록으로 돌아가기

블로그

Vue에서 v-if의 분기가 증가하면 전략 패턴을 고려하십시오.

v-if에 의한 조건 분기가 3 패턴 이상이 되면, 전략 패턴으로 컴퍼넌트를 동적으로 전환하는 구현을 검토. 가독성과 유지 보수성 향상.

게시일:

React에서는 자주 사용하지만, Vue에서도 제대로 실현할 수 있다.

요점

  • 패턴을 문자열로 정의할 수 있도록 생각
    • 예: API 통신 상태: pending | resolve | reject
    • 예 : SNS 아이콘 발행 : twitter | facebook | instagram | github | line
  • 패턴별 컴포넌트 만들기

구현

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

포인트

  • 오브젝트 매핑: 패턴 문자열과 컴포넌트 매핑
  • 동적 구성요소: <component :is="...">에서 동적으로 전환
  • 형 안전성: TypeScript에서 패턴을 Union Type으로 정의

요약

v-if에서 3 패턴 이상의 분기가 발생하면 전략 패턴을 고려합시다.

동적 구성 요소를 사용하면 템플릿이 깔끔하고 새로운 패턴을 추가 할 수 있습니다.