const app = Vue.createApp({...});
app.component('component-name', { ... });
전역 등록은 모듈 번들러 같은 빌드 시스템을 이용할 때, 컴포넌트를 사용하지 않더라도 최종 빌드에 계속 포함되기 때문에 비효율적이다.
const componentA = {...};
const componentB = {...};
const componentC = {...};
const app = Vue.createApp({
components: {
'component-name': componentA,
'component-name': componentB,
'component-name': componentC,
}
});
component-name
에 속하는 key
가 컴포넌트의 이름이 되며, value
가 참조하는 컴포넌트가 된다.
등록된 컴포넌트는 해당 스코프 안에서 <component-name><component-name/>
형태로 사용이 가능하다.
<div id="components">
<button-counter></button-counter>
<button-counter></button-counter>
<button-counter></button-counter>
</div>
컴포넌트에는 props
라는 Array
형태의 특수한 property
가 있으며, props
에 배열에 정의된 property
를 이용해서 값을 전달받아 컴포넌트의 재사용성을 늘릴 수 있다.
v-bind
디렉티브를 이용해서 동적 props
전달이 가능하다.
<div id="blog-posts-demo">
<blog-post
v-for="post in posts"
:key="post.id"
:title="post.title"
></blog-post>
</div>
HTML
안에서 이벤트 이름은 항상 kebab-case
를 사용하는 것이 권장된다.
v-on
디렉티브를 이용해서 커스텀 이벤트 등록이 가능하며, 하위 컴포넌트의 이벤트를 수신한다.
하위 컴포넌트에서는 $emit('event-name'[, argument])
메서드를 이용해서 이벤트를 트리거 한다.
$emit
메서드에서 argument
로 이벤트에 값을 전달할 수 있으며, 이벤트 핸들러를 등록한 곳에서 $event
를 이용해 값에 접근이 가능하다.
이벤트 핸들러가 메서드 형태라면 첫 번째 parameter
로 값이 전달된다.
Node Version Manager의 약어로, Node.js
의 버전을 관리하는 도구이다.
버전 충돌 문제 때문에 기존에 사용하던 Node.js
를 삭제하지 않고 버전 관리를 하고 싶다면, n
패키지를 이용한다.
nvm install <version>
명령으로 간단하게 버전별로 설치가 가능하며, nvm use <version>
명령으로 설치된 버전을 사용하도록 할 수 있다.
Single File Component의 약어로, 전역 컴포넌트의 여러 단점을 해결하기 위해서 컴포넌트를 하나의 파일 단위로 분리한 것을 말한다.
SFC
의 구조는 아래와 같다.
<template>
<h1 class="title">{{ msg }}</h1>
</template>
<script>
export default {
data() {
return {
msg: 'Hello Vue~'
}
}
}
</script>
<style>
.title {
color: orange;
}
</style>
SFC
는 import
키워드를 이용해서 불러오며, Javascript
와 CSS
밖에 해석하지 못하는 웹 브라우저의 특성상 SFC
를 컴파일하는 과정을 거쳐야 한다.import * as Vue from 'vue';
import App from './App.vue';
Vue.createApp(App).mount('#app');
style
태그에 scoped
속성을 추가하면 스타일이 해당 컴포넌트 내에서만 유효하게 된다.webpack-dev-server
패키지를 이용하면 간단하게 브라우저 테스트를 해볼 수 있다.
resolve
옵션을 통해서 확장자를 생략하거나, path
에 대한 별칭을 정의할 수 있다.
module.exports = {
resolve: {
extensions: ['.vue', '.js'],
alias: {
'~': path.resolve(__dirname, 'src')
}
},
...
copy-webpack-plugin
플러그인을 이용해서 build
시 특정 폴더에 있는 파일들을 복사해서 output path
에 포함시킬 수 있다.