개발자 '쑥말고인절미'
[Vue.js] 컴포넌트 & Props 본문
Vue.js에서 기본적인 프로그램 구현 방법은 기능을 적절하게 분리하여 컴포넌트화 시켜서 개발을 하고 이것을 연결하여 프로그램이 작동하도록 구현하는 방법을 사용한다.
컴포넌트(component)
- 여러 개의 프로그램 함수들을 모아 하나의 특정한 기능을 수행할 수 있도록 구성한 작은 기능적 단위
- 컴포넌트를 이용하면 소프트웨어 개발을 마치 레고블록 쌓듯이 조립식으로 쉽게할 수 있다.
- 모듈(module)이라고도 한다.
- 쉽게 말하면 화면단위이고, 컴포넌트로 화면을 구성하면 재사용도 쉽고 소스 수정도 용이하다.
- 컴포넌트 안에 컴포넌트를 생성할 수 있다.
- 부모 컴포넌트에 있는 데이터를 자식 컴포넌트가 가져올 때는 부모 컴포넌트에서 props로 변수에 값을 넣어주면 자식 컴포넌트가 읽어올 수 있다.
- 하지만 자식 컴포넌트에 있는 데이터를 부모 컴포넌트에 넘기는 것은 할 수 없지만 Event를 사용하여 보내주면 넘길 수 있다.
- 컴포넌트를 사용하면 단위 테스트가 용이하다. 테스트를 컴포넌트 단위로 하면 되기 때문에 명확하고 쉽게 수정도 가능하게 된다.
Props
- 컴포넌트에 등록할 수 있는 커스텀 속성
- 컴포넌트에서 데이터를 넘기기 위해 사용한다.
- 값이 prop 속성에 전달되면, 그 값은 해당 컴포넌트 인스턴스의 속성이 된다.
- data 속성과 마찬가지로 컴포넌트 인스턴스에서 prop 값에 접근할 수 있다.
- props는 부모->자식으로 데이터 전송이 가능하지만, 자식->부모로는 전송이 불가한 단방향 데이터 전달방식이다.
- 컴포넌트는 원하는 만큼 props를 가질 수 있으며 기본적으로는 어떤(any) 타입의 값이라도 넘길 수 있다.
- 예시 1. 숫자형(Number)
- 예시 2. 논리 자료형(Boolean)
- 예시 3. 배열
- 예시 4. 객체
- 예시 5. 객체의 속성
<!-- ======================================================================== -->
<!-- =====================예시1. 숫자형(Number) 전달=========================== -->
<!-- `42`는 정적이지만 Vue에게 이 값이 문자열이 아니라 자바스크립트 표현식임을 알리기위해 v-bind가 필요하다. -->
<blog-post :likes="42"></blog-post>
<!-- 변수 값에 동적으로 할당한다. -->
<blog-post :likes="post.likes"></blog-post>
<!-- ======================================================================== -->
<!-- =====================예시2. 논리 자료형(Boolean) 전달===================== -->
<!-- 값이 없는 prop를 포함하면 `true`를 의미한다. -->
<blog-post is-published></blog-post>
<!-- `false`는 정적이지만 Vue에게 이 값이 문자열이 아닌 자바스크립트 표현식임을 알리려면 v-bind가 필요하다. -->
<blog-post :is-published="false"></blog-post>
<!-- 변수 값에 동적으로 할당한다. -->
<blog-post :is-published="post.isPublished"></blog-post>
<!-- ======================================================================== -->
<!-- =====================예시3. 배열 전달===================================== -->
<!-- 배열이 정적이지만 Vue에게 이 값이 문자열이 아닌 자바스크립트 표현식임을 알리려면 v-bind가 필요하다. -->
<blog-post :comment-ids="[234, 266, 273]"></blog-post>
<!-- 변수 값에 동적으로 할당한다. -->
<blog-post :comment-ids="post.commentIds"></blog-post>
<!-- ======================================================================== -->
<!-- =====================예시4. 객체 전달===================================== -->
<!-- 객체가 정적이지만 Vue에게 이 값이 문자열이 아니라 자바스크립트 표현식임을 알리려면 v-bind가 필요하다. -->
<blog-post
:author="{
name: 'Veronica',
company: 'Veridian Dynamics'
}"
></blog-post>
<!-- 변수 값에 동적으로 할당한다. -->
<blog-post :author="post.author"></blog-post>
<!-- ======================================================================== -->
<!-- =====================예시5. 객체의 속성 전달============================== -->
<!-- 객체의 모든 속성을 prop로 전달하려면 전달인자없이 v-bind를 사용할 수 있다(:prop-name 대신 v-bind를 사용) -->
<!-- 예를들어 post객체가 주어지면: -->
post: {
id: 1,
title: 'Vue와 떠나는 여행'
}
<!-- 아래와 같이 작성하는 것은: -->
<blog-post v-bind="post"></blog-post>
<!-- 다음과 동일하다: -->
<blog-post v-bind:id="post.id" v-bind:title="post.title"></blog-post>
참고링크
컴포넌트 기초 | Vue.js
컴포넌트 기초 기본 예제 뷰 컴포넌트 예제를 살펴봅시다: const app = Vue.createApp({}) app.component('button-counter', { data() { return { count: 0 } }, template: ` You clicked me {{ count }} times. ` }) 1 2 3 4 5 6 7 8 9 10 11 12 13 1
v3.ko.vuejs.org
Props | Vue.js
Props 이 페이지는 여러분이 이미 컴포넌트 기초를 읽었다고 가정하고 쓴 내용입니다. 컴포넌트가 처음이라면 기초 문서를 먼저 읽으시기 바랍니다. Prop 타입 이제까지는 문자열 배열로 나열 된 p
v3.ko.vuejs.org
Vue.js의 핵심인 컴포넌트에 대한 간략한 정리
Vue.js의 핵심이자 꽃이라 할 수 있는 컴포넌트(Component)에 대해 간략히 정리해 보려고 합니다. Vue.js에서 기본적인 프로그램 구현 방법은 화면 또는 기능을 적절하게 분리하여 컴포넌트화 시켜서
ux.stories.pe.kr
'STUDY > Vue.js & Express.js & JS' 카테고리의 다른 글
[JS] fill() 메소드 (0) | 2022.09.05 |
---|---|
[Node.js] Node.js 개념 (0) | 2022.08.30 |
[에러] 'vue-cli-service'은(는) 내부 또는 외부 명령, 실행할 수 있는 프로그램, 또는 배치 파일이 아닙니다. (0) | 2022.08.19 |
[에러] Uncaught Error Error: Cannot find module 'http-errors' (0) | 2022.08.19 |
[JS] getMonth() 반환값에 1씩 차이발생?! (0) | 2022.07.14 |