✏️Vue 3 `defineProps`와 `withDefaults` (Vue 2와 차이점)

ZYE KIM·2025년 5월 8일
0

Tech Log

목록 보기
6/6
post-thumbnail

Vue3에서 <script setup> 구문을 사용할 때, 컴포넌트 props를 정의하는 방식이 완전히 달라졌습니다.
이 글에서는 Vue3의 definePropswithDefaults 사용법을 예제와 함께 설명하고, Vue2 방식과의 차이점도 짚어보겠습니다.


✅ Vue2에서 Props 기본값 설정 방법

Vue2에서는 props를 props 옵션으로 정의하고, 객체 형태로 기본값과 타입을 지정

  • default : 기본값 지정
  • required : false: 생략 가능 (기본이 false)
export default {
  props: {
    title: {
      type: String,
      required: false,
      default: '상품 이미지'
    },
    itemName: String,
    itemCode: String
  }
}

✅ Vue3: <script Setup>에서의 Props 정의

1. defineProps로 Props 선언

  • 타입 기반으로 선언하며, 이때는 기본값 설정이 되지 않습니다.
<script setup>
const props = defineProps<{
  title?: string;
  itemName?: string;
  itemImageList?: any[];
  itemCode?: string;
}>();
</script>

2. withDefaults()로 기본값 지정

  • withDefaults는 타입 기반 defineProps에만 사용 가능
  • 런타임에 작동하는 유일한 기본값 지정 방법
<script setup>
export interface Props {
  title?: string;
  itemName: string;
  itemImageList: Array<any>;
  itemCode: string;
}
let props = withDefaults(defineProps<Props>(), {
  title: "상품 이미지"
});
</script>

🙅‍♀️잘못된 예시 (작동하지 않음)

  • Vue2 스타일의 default는 <script setup>에서 무시됨!
// default 속성은 무시됨
const props = defineProps({
  title: {
    type: String,
    default: '상품 이미지'
  }
});

🆚 Vue 2 vs Vue 3 차이 요약

항목Vue 2 (Options API)Vue 3 (<script setup>)
props 선언props: { ... }defineProps 사용
기본값 지정default: 'value'withDefaults() 사용
타입 지정type: StringTypeScript 기반 정의 권장
작동 시점런타임컴파일 타임 매크로 (defineProps)

참고

profile
주니어 프론트엔드개발자

0개의 댓글