Vue 시작하기 ④

2021. 8. 9. 18:04Vue

 

이번 포스팅에선 vue의 자식 컴포넌트와 부모 컴포넌트를 이용하여 재사용성을 높이는 방법에 대해 알아보자

 

 

 

 

컴포넌트를 정의하기

동일한 템플렛을 계속하여 만들지 않아도, 컴포넌트를 통해 언제든지 불러서

재사용을 할 수 있다

 

위의 코드에선

my-component와 your-component를 정의하였다

my-component에선 div 박스를 생성하고,

your-component에서도 똑같이 div 박스를 생성하지만 부모(app)로부터 greet이라는 property를 받는다

 

위의 부모 요소를 보면 

your-component v-bind:greet = " '안녕하세요' "라고 greet에 property를 전달해주었다.

 

 

 

 

위의 코드에 대한 결과물이다

html 영역에 컴포넌트만 추가했을 뿐인데, 직접 html에 작성한 것처럼 요소가 잘 나와있다 (css style은 따로 추가함)

이렇게 중복되는 요소를 계속해서 사용하는 경우, 컴포넌트로 재사용성을 높일 수 있다

 

 

 

 

자식 컴포넌트 (friends-component)에서 props를 리스트에 출력할 friends로 받을 경우,

부모 컴포넌트 (app)에게 property를 요청한다.

부모 컴포넌트의 v-bind:friends는 friends를 가리키고 있으며,

data안에 있는 friends에는 ["김구라", "해골", "원숭이"]라는 배열이 존재한다.

 

 

부모 컴포넌트의 property를 받아와서 리스트로 출력하니

배열에 들어있던 값이 리스트 아이템으로 잘 출력되었다

 

 

 

 

 

이번엔 재사용이 가능한 컴포넌트를 전역으로 정의하기 위해

Vue.component("컴포넌트 이름", {컴포넌트 데이터}); 형식으로 입력했다

 

전역 컴포넌트의 경우, 기존에 사용했던 data:{} 형식을 사용하지 못한다.

무조건 data(){} 함수로 사용하자

 

* data(){}는 data:function(){}를 줄임 표현이다. 

 

data 함수를 호출하면 {msg:"div입니다."}라는 key와 vale를 가진 오브젝트를 리턴해준다.

그리고 이 오브젝트가 모델로 사용이 된다.

 

위 코드의 출력된 결과물이다

 

 

 

 

부모 컴포넌트는 자식 컴포넌트에게 fortune이라는 property를 전달한다.

위의 코드에선 property가 input에서 받는 텍스트에 따라 값이 계속 변경되는 경우인데,

부모에서 어떤 모델을 자식에게 propety로 전달할 때 전달했던 모델이 업데이트되면

자식 컴포넌트에게 업데이트된 (변경된) 값을 새롭게 전달해준다.

 

부모 컴포넌트와 자식 컴포넌트 사이에 property를 주고받는 과정

 

 

 

1. props를 요청하는 방법

 

자식 컴포넌트에 props:["fortune"]을 작성하여

fortune이라는 이름의 props를 받을 준비를 한다.

 

2. props를 전달하는 방법

 

<자식 컴포넌트명 v-bind:프로퍼티명="값">,

위의 코드에선 <fortune-component v-bind:fortune="fortune">를 통해

부모 컴포넌트는 자식 컴포넌트에게 props를 넘겨준다

 

(위의 이미지에선 data를 거치지 않고 바로 고정된 값을 주었다)

 

 

 

위의 코드를 실행할 경우,

가장 초기값으로 설정되어있는 props인 "만수무강!"이 출력된다.

그 이후에 input 텍스트를 변경하면 자식 컴포넌트에 전달되는 props가 변경되어

변경이 될 때마다 부모 컴포넌트에서 자식 컴포넌트에게 props를 새롭게 전달해준다.

 

 

 

 

props 이름이 fortuneToday라는 카멜 케이스로 작성되어 있을 경우,

케밥 케이스 kebab case (fortune-today)로 props를 전달해야 한다

 

그래서 카멜 케이스로 작성하여 케밥 케이스로 변경하는 것보단,

아예 소문자로만 작성(fortunetoday)하는 방법이 더 편할 수 있다.

 

 

 

 

만약 props에서 카멜 케이스로 작성하고 부모의 v-bind를 똑같이 카멜 케이스로 작성하면?

props가 전달되지 않으며, 콘솔 창을 확인했을 때 카멜 케이스로 작성된 fortuneToday 대신

케밥 케이스로 작성된 fortune-toda로 작성하라고 vue에서 알려준다.

 

 

카멜 케이스에서 케밥 케이스로 변경하면

결과가 잘 출력되는 것을 확인 가능하다 :)

 

반응형

'Vue' 카테고리의 다른 글

Vue 시작하기 ⑥  (0) 2021.08.12
Vue 시작하기 ⑤  (0) 2021.08.11
Vue 시작하기 ③  (0) 2021.08.08
Vue 시작하기 ②  (0) 2021.08.07
Vue 시작하기 ①  (0) 2021.08.06