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에 포함시킬 수 있다.