Vue를 공부하면서 헷갈리는 data에 대해서 정리하고자 한다.
처음 Vue.js 튜토리얼을 통해 공부를 하면 인스턴스에 대해서 배운다. 인스턴스는 대략 다음과 같은 구조를 가지는데
![]() |
![]() |
보면 인스턴스(좌)는 data가 객체로 선언되어 있다.
해당 객체에 몇개의 데이터든 집어 넣고 필요할때마다 꺼내 쓸 수 있는 방식이다.
그런데 컴포넌트(우)를 보면 data가 객체가 아닌 함수로 이루어져 있는 것을 알 수 있다.
왜 다를까? 무언가 이유야 있으니 다른거겠지만, 모르고 쓰면 헷갈려서 정리를 하고자 한다.
우선 컴포넌트를 사용하는 이유를 알면 간단하다.
컴포넌트를 이용하는 이유는 필요할 때 마다 인스턴스를 작성하는 것이 아닌 필요할 때마다 꺼내 쓰는 재사용성을 위함이다.
만약 컴포넌트를 사용하지 않는다면 필요할 때 마다 인스턴스를 선언해야 할 것이다.
만약 "안녕하세요!!" 라는 문장을 표출해야 하는데 3번 해야 된다고 하면 다음과 같이 인스턴스를 3번 선언해야 한다.
하지만 컴포넌트를 사용하면 하나의 컴포넌트를 이용하여 여러번 호출할 수 있다.
![]() |
![]() |
이렇게 하면 button-counter이라는 컴포넌트의 template를 몇번이고 호출 하는 것이 가능하다.
해당 버튼을 클릭하면 counter가 1씩 증가하는 구조이다. 그런데 자세히 보면 각 버튼들의 숫자값이 다 다르다는 것을 알 수 있다.
이는 컴포넌트를 이용하여 호출한 객체들은 다 다른 녀석들이라는 의미이다.
즉 함수에서 컴포넌트가 호출될때마다 새로운 객체들을 반환하고 이에 해당하는 data만 컨트롤 할 수 있게
만든 것 같다.
만약 컴포넌트의 객체가 하나의 객체를 참조한다면 컴포넌트를 여러번 호출 하는 의미가 없을테니 말이다.
( 버튼 하나를 클릭했는데 다 같이 1씩 증가하면 궅이 여러개를 만들 이유가 없듯이..)
결론 : 컴포넌트의 data가 함수인 이유는
각 컴포넌트에 맞는 데이터를 참조하기 위해 새로운 객체를 생성 및 반환하기 위함 (feat. 뇌피셜)
'FrontEnd > Vue' 카테고리의 다른 글
[Vue] 데이터 변경후 랜더링이 안되는 현상.. ( feat $forceUpdate(): 강제 리랜더링 ) (0) | 2021.07.15 |
---|---|
[Vue] component 생성(?) 에러 (0) | 2021.06.27 |
[Vue] 컴포턴트 data 함수안의 값 접근 (0) | 2021.05.30 |
[Vue] vue 데이터 값 변경 (0) | 2021.04.10 |
[Vue] id 위치 ( v-bind, v-model ) (0) | 2021.04.04 |