자세한 이유는, 아래 URL을 참고한다.

https://pablohpsilva.github.io/vuejs-component-style-guide/#/korean

필요하다면 컴포넌트 만들기

  • 컴포넌트가 너무 크다면, 사용 및 유지보수가 어려울 수 있습니다.
  • 컴포넌트가 너무 작다면, 프로젝트가 너무 커지고 컴포넌트간 통신이 어려울 수 있습니다.
  • 확실하지 않다면 만들지마세요! “나중에 쓸모있는 컴포넌트”로 프로젝트를 오염시키지 마십시오. 그 컴포넌트는 영원히 사용하지 않을 수도 있습니다. 프로젝트의 컴포넌트와의 호환성의 복잡성을 피하기 위해 필요할 때 컴포넌트를 만드는게 좋습니다

컴포넌트 이름

1
2
3
4
5
6
7
8
9
<!-- 권장합니다 -->
<app-header></app-header>
<user-list></user-list>
<range-slider></range-slider>

<!-- 피하세요! -->
<btn-group></btn-group> <!-- 짧지만 발음할 수 없습니다. `button-group`으로 사용하는 것이 좋습니다. -->
<ui-slider></ui-slider> <!-- 모든 컴포넌트는 UI 엘리먼트이기 때문에 의미가 없습니다. -->
<slider></slider> <!-- 사용자 정의 엘리먼트 스펙을 준수하지 않았습니다. -->

컴포넌트 props를 원시 자료형으로 사용하기

1
2
3
4
5
6
7
8
9
10
11
12
<!-- 권장합니다 -->
<range-slider
:values="[10, 20]"
min="0"
max="100"
step="5"
:on-slide="updateInputs"
:on-end="updateResults">
</range-slider>

<!-- 피하세요! -->
<range-slider :config="complexConfigObject"></range-slider>

props 활용!

  • props에 기본 값을 사용하세요.
  • 값을 validate 하기위해 type 옵션을 사용하세요.
  • 중복된 props가 있는지 확인하세요.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<template>
<input type="range" v-model="value" :max="max" :min="min">
</template>
<script type="text/javascript">
export default {
props: {
max: {
type: Number, // [1*] 'max' prop은 Number로만 사용할 수 있습니다.
default() { return 10; },
},
min: {
type: Number,
default() { return 0; },
},
value: {
type: Number,
default() { return 4; },
},
},
};
</script>

컴포넌트 구조의 활용

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<template lang="html">
<div class="Ranger__Wrapper">
<!-- ... -->
</div>
</template>

<script type="text/javascript">
export default {
// 이름 적는 것을 잊지마세요
name: 'RangeSlider',
// compose new components
extends: {},
// 컴포넌트 어트리뷰트 그룹
props: {
bar: {}, // 알파벳순으로 정렬합니다
foo: {},
fooBar: {},
},
// 컴포넌트 변수 그룹
data() {},
computed: {},
// 컴포넌트가 다른 컴포넌트를 사용할 경우
components: {},
// 컴포넌트 메서드 그룹
watch: {},
methods: {},
// 컴포넌트 라이프사이클 메서드 그룹
beforeCreate() {},
mounted() {},
};
</script>

<style scoped>
.Ranger__Wrapper { /* ... */ }
</style>

Reference

https://pablohpsilva.github.io/vuejs-component-style-guide/#/korean