프론트엔드/Vue
참조형 props의 default 값 설정하기
bread-gee
2025. 1. 16. 17:00
반응형
현재 작업 중인 프로젝트에 Typescript를 도입해서 사용 중인데
type-check를 해보니 정말 개판인거에요.(네. 제가 개판으로 사용했습죠...)
그래서 에러 뜬 파일들을 일일이 열어서 수정을 했는데...
소스도 깨끗하지 않더라고요.
props를 가져올 때의 default 값도 제각각~
대충 알고 막연하게 사용했던 자신을 반성하며...
정리를 해보았습니다!
여기서 default❗
defineProps({
list: {
type: Array as () => { label: string; value: number }[],
default: () => []
},
paginationValue: {
type: Object as () => PaginationValue,
default: () => ({})
},
})
다행히(?) 항상 함수형으로 가져와서 컴포넌트 간 이슈는 없었지만...
() => [], () => ([]), () => {}, () => ({})
너무 혼용해서 사용을 했었읍니다..
그래서 정리한 내용 ❗
📌 배열
🧿 default: []
- 정적으로 배열 리터럴을 기본값으로 설정한다.
- 문법적으로는 유효하지만, 배열이 참조형 데이터이므로, 모든 컴포넌트 인스턴스가 동일한 배열 참조를 공유하게 된다.
- 👉🏻 컴포넌트를 10번 사용하면 10개의 관련 데이터가 하나의 그릇([])을 사용한다니..끔찍
🧿 default: () => [] ⭕
- 컴포넌트 인스턴스가 생성될 때마다 새로운 배열을 생성하여 기본값을 설정한다.
- 각 컴포넌트 인스턴스는 독립적인 배열을 갖는다.
- * 참조형 데이터(배열, 객체 등)의 기본값으로 사용하는 것이 권장됩니다.
🧿 default: () => ([])
- default: () => []와 동일한 결과를 제공한다.
- 괄호를 추가한 것은 문법적인 차이일 뿐 기능상 차이는 없다.
- 객체 사용 시 객체 리터럴을 반환하기 위해 사용하는 거고, 배열에선 의미 없다.
- default: () => ([]) 이렇게 입력해도 prettier가 알아서 default: () => [] 이렇게 변환해 준다.
📌 객체
🧿 default: {}
- 정적으로 객체 리터럴을 기본값으로 설정한다.
- 👉🏻 배열의 경우와 마찬가지로 모든 컴포넌트 인스턴스가 동일한 객체 참조를 공유한다.
🧿 default: () => {}
- 빈 함수를 반환하는 함수이다.
- 값을 반환하지 않기 때문에 기본값이 undefined가 된다.
const fn = () => {}; // 빈 화살표 함수
console.log(fn()); // undefined
🧿 default: () => ({}) ⭕
- 빈 객체를 반환하는 함수이다.
- 컴포넌트 인스턴스가 생성될 때마다 새로운 빈객체를 생성하여 기본값을 설정한다.
- 각 컴포넌트 인스턴스마다 독립적인 객체를 가질 수 있어 참조형 데이터의 기본값으로 사용하기에 적합하다.
const fn = () => ({}) // 빈 객체를 반환하는 화살표 함수
console.log(fn()); // {}
반응형