개발/Vue.js

[Vue.js] Vue, 뷰 인스턴스, 뷰 컴포넌트

하빈H 2022. 12. 18. 22:55

Vue란?

MVVM((model-view-viewmodel) 패턴의 뷰모델(viewmodel) 레이어에 해당하는 화면 단 라이브러리이다.

MVVM 패턴

 


뷰 인스턴스

인스턴스는 뷰로 개발할 때 필수로 생성해야 하는 코드이다.

 

뷰 인스턴스 생성 예시

아래와 같이 코드를 작성하고 VS Code의 Open With Live Server 활용해서 띄운 후 개발자도구로 열어보면 데이터 메시지가 잘 뜬 것을 확인할 수 있다.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div id="app">

    </div>

    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script>
        var vm = new Vue({
            el: '#app',
            data: {
                message: 'hi'
            }
        });
    </script>
</body>
</html>

 

인스턴스 속성

  • el : 인스턴스가 그려지는 화면의 시작점 (특정 HTML 태그)
  • template : 화면에 표시할 요소 (HTML, CSS 등)
  • data : 뷰의 반응성(Reactivity)가 반영된 데이터 속성
  • methods : 화면의 동작과 이벤트 로직을 제어하는 메소드
  • created : 뷰의 라이프 사이클과 관련된 속성
  • watch : data에서 정의한 속성이 변화했을 때 추가 동작을 수행할 수 있게 정의하는 속성
new Vew({
	el: ,
    template: ,
    data: ,
    methods: ,
    created: ,
    watch: ,
});

 


뷰 컴포넌트

컴포넌트는 화면의 영역을 구분해서 코드로 관리하는 기능이다.

 

전역 컴포넌트

전역 컴포넌트는 보통 플러그인이나 라이브러리를 등록할 때 활용한다.

전역 컴포넌트로 등록하면 인스턴스를 생성할 때마다 컴포넌트를 새로 등록하지 않아도 사용할 수 있다.

 

인스턴스를 생성하면 기본적으로 Root 컴포넌트로 인식한다.

아래와 같이 작성하고 개발자도구로 확인해보면 Root 컴포넌트 하위에 app-header, app-content 컴포넌트가 잘 등록된 것을 확인할 수 있다.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div id="app">
        <app-header></app-header>
        <app-content></app-content>
    </div>

    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script>
        Vue.component('app-header', {
            template: '<h1>Header</h1>'
        });
        Vue.component('app-content', {
            template: '<div>content</div>'
        });
        
        new Vue({
            el: '#app'
        });
    </script>
</body>
</html>

 

지역 컴포넌트

지역 컴포넌트 등록 방식으로 작성하면 특정 컴포넌트 하위에 어떤 컴포넌트가 있는지 확인이 용이하다.

보통 서비스를 구현할 때에는 지역 컴포넌트 등록 방식으로 작성한다.

 

지역 컴포넌트 등록 방법은 아래와 같다.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div id="app">
        <app-footer></app-footer>
    </div>

    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script>
        new Vue({
            el: '#app',
            components: {
                // '컴포넌트 이름': 컴포넌트 내용,
                'app-footer': {
                    template: '<footer>footer</footer>'
                }
            }
        });
    </script>
</body>
</html>