공부하자/Vue.js

#2. Vue 컴포넌트, props, event

snbrin 2023. 9. 21. 15:31

Inflearn [ Vue.js 시작하기 - Age of Vue.js ]  강의 기록입니다.

 

뷰 컴포넌트?

화면의 영역을 구분하여 개발하도록 하는 뷰의 기능. 코드의 재사용성이 올라감. 코드 반복 최소화.

https://v2.ko.vuejs.org/v2/guide/components.html

 

컴포넌트 — Vue.js

Vue.js - 프로그레시브 자바스크립트 프레임워크

v2.ko.vuejs.org

 

 

전역 컴포넌트 등록 예시

전역 컴포넌트는 거의 등록하는 일이 없음. 지역 컴포넌트를 주로 사용함

<body>
    <div id="app">
        <app-header></app-header>   <!-- 만둘어둔 컴포넌트 적용 -->
        <app-content></app-content>
        <app-footer></app-footer>
    </div>

    <div id="app2">
        <app-header></app-header>   <!-- 만둘어둔 컴포넌트 적용 -->
        <app-content></app-content>
        <app-footer></app-footer>
    </div>

    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script>
        // 컴포넌트 등록 : Vue.component('컴포넌트이름', 컴포넌트 내용);
        // 전역 컴포넌트
        Vue.component('app-header', {
            template : '<h1>Header</h1>'
        });

        Vue.component('app-content', {
            template : '<div>Content</div>'
        });

        new Vue({   //인스턴스를 생성하면 기본으로 root 컴포넌트로 생성됨
            el : '#app',
            // 지역 컴포넌트 등록
            components : {  
                // '컴포넌트 이름' : 컴포넌트 내용
                'app-footer' : {
                    template : '<footer>Footer</footer>'
                }
            }
        });

        // 인스턴스 생성(여러개 생성 가능, vue3에서는 글로벌 인스턴스 1개만 사용함)
        new Vue({
            el : '#app2'
        })

    </script>
</body>

root컴포넌트(상위,부모) 안에 새로운 컴포넌트(하위) 2개 생성

 

지역 컴포넌트

인스턴스 생성 안에 components를 만듦

new Vue({   //인스턴스를 생성하면 기본으로 root 컴포넌트로 생성됨
    el : '#app',
    components : {  // 지역 컴포넌트 등록
        // '컴포넌트 이름' : 컴포넌트 내용
        'app-footer' : {
            template : '<footer>Footer</footer>'
        }
    }
})

전역 컴포넌트와 지역 컴포넌트 등록

 

전역 컴포넌트 VS 지역 컴포넌트

전역 컴포넌트는 새로운 인스턴스를 생성할 때마다 등록하지 않아도 사용이 가능한 반면,

지역 컴포넌트는 인스턴스가 새로 생성되면 지역 컴포넌트도 인스턴스 안에 새롭게 등록해주어야 함

인스턴스는 여러개 생성 가능하나, Vue3에서는 글로벌 인스턴스 1개만 사용

 

컴포넌트 통신

상위 컴포넌트에서 하위 컴포넌트로는 Data가 이동 됨. 이걸 props라고 함

하위 컴포넌트에서 상위 컴포넌트로는 Event가 전달 됨. 이걸 event emit이라고 함

 

 

같은 컴포넌트 레벨 간의 통신

1,2,3은 같은 레벨의 컴포넌트
동레벨 통신은 루트로 이벤트 전달 후 다시 하위로 props 전달