반응형
Vue.js Style Guide의 내용을 정리한 글이다. Vue.js
를 메인 프레임워크로 사용하고 있었지만, 해당 문서를 살펴보지 않았다. 최근에서야 스타일가이드를 읽고 '이걸 왜 이제야 읽었을까?'하는 생각이 들었다. 안티패턴을 굉장히 많이 사용하고 있었다. 물론 스타일 가이드에 나온 내용을 무조건 따라야하는 것은 아니지만, 적어도 그 안에 들어 있는 철학을 배우는게 중요하다. 그리고 다른 패턴을 사용할 때는 그만한 합리적인 이유가 있어야한다.
이 가이드에서는 우선순위에 따라 다음과 같은 네가지 카테고리로 내용을 분류하였다.
- Essential: 반드시 따라야한다.
- Strongly Recommended: 가능하면 따라야한다.
- Recommended: 따르면 좋다.
- Use with Caution: 조심히 따라야한다.
하나씩 살펴보도록 하자. 참고로, 아래 내용은 직접 요약, 번역한 내용이고 상세한 설명은 생략하였다. 훑어보는 용도로만 사용하고 이해가 가지 않는 부분은 공식문서를 참고하기를 권한다.
Essential: 반드시 따라야한다.
- 컴포넌트명은 최소한 두 단어 이상의 조합으로 짓는다.
- 데이터는 반드시 함수여야한다.
- Props는 최대한 자세하게, 최소한 타입이라도 명시해야 한다.
- v-for는 반드시 key와 함께 사용한다.이 때, key로는 object의 id를 사용하는 것이 좋다.
- v-for와 v-if는 함께 사용하지 않는다. 새로운 computed 프로퍼티로 대체하여 사용한다.
- App/Layout 스타일을 제외한 컴포넌트는의 스타일은 스코핑한다. Vue의
scoped
나BEM
을 활용한 스코핑 - 함수를 private하게 유지하기 위해서는 모듈 스코핑을 사용하라. 그것이 불가능하다면
$_yourPlugin_<함수명>
을 사용하라.
Strongly Recommended: 가능하면 따라야한다.
- 컴포넌트를 분리된 파일에 배치한다. 수정하거나 리뷰할 때 빨리 찾을 수 있다.
- 베이스 컴포넌트들은
Base
,Ap
p, 또는V
와 같은 prefix를 사용해 명명한다. - 페이지당 단 한번만 쓰는 컴포넌트라면
The
prefix를 사용해 명명한다. - 부모 자식 컴포넌트가 강하게 묶여있는 컴포넌트의 경우, 자식 컴포넌트의 이름은 부모 컴포넌트의 이름을 포함하여야한다.
- 컴포넌트 명은 공통된 부분이 앞에 구체적인 부분이 뒤로 가게 짓는다. (e.g. ClearSearchButton(x) -> SearchButtonClear(o)) 그래야 에디터에서 찾기가 쉽다. 컴포넌트의 개수가 100개가 넘어가기 전에는 폴더로 구분하길 지양한다. (폴더의 깊이를 얕게할 수록 좋다는 말로도 해석가능)
- 컨텍스트(e.g. slot)이 없는 컴포넌트는 self-closing하게 사용하는 편이 좋다. (e.g.
<MyComponent/>
) 단, self-closing을 지원하지 않는 DOM 템플릿에서는 그렇게 사용하지 않아도 된다. PascalCase
가kebab-case
보다 선호된다. 단, DOM 템플릿에서는 그렇게 사용하지 않아도 된다. 만약 kebab-case를 사용하거든, 모든 곳에서 통일하라.- 컴포넌트명으로 축약형을 쓰지 않는다. 길어도 분명하게 쓴다. (e.g. SdSettings.vue -> StudentDashboardSettings.vue)
- Props를 선언할 때는 camelCase, 템플릿 안에서는 kebab-case를 사용한다. js에서는 camelCase가, Html에서는 kebab-case가 자연스럽다.
- 여러 개의 Attribute는 각각 다른 라인에 작성하는 것이 가독성에 좋다.
- 템플릿 내에서 복잡한 JS 표현식을 쓰지 않는다.
- 복잡한 computed 프로퍼티는 가능하면 단순하게 쪼갠다.
v-bind
,v-on
,v-slot
의 shorcut(:, @, #)을 쓰려면 모든 곳에서 다 쓰고, 아니면 아예 쓰지 않는다.
Recommended: 따르면 좋다.
- 컴포넌트/인스턴트 옵션은 항상 똑같은 순서로 배열되어야 한다. [Vue에서 권장하는 순서 바로가기]]
- 컴포넌트의 Attribute도 항상 똑같은 순서로 배열되어야 한다. [Vue에서 권장하는 순서 바로가기]
- 옵션이 복잡한 경우, 각 옵션 사이에 공백 라인을 주면 가독성을 높일 수 있다.
<style>
은 반드시 마지막에, 그리고 순서는 항상 일치 시킨다.
Use with Caution: 조심히 따라야한다.
- 같은 종류의 엘리먼트는 v-if + v-else는 key를 사용하는 것이 최적화에 좋다. 다만, 같은 요소가 아닌데 사용하면 의도치 않은 결과가 생긴다.
scoped
스타일에서 element selector보다는 class selector를 써야한다.scoped
에서 element selector는 성능이 떨어진다.Props
와event
를 사용하는 것이this.$parent
를 사용하거나props
를 직접 변경하는 것보다 선호된다. 단, 이미 쌍을 이룬 컴포넌트의 경우 해당요소를 사용해야 하는 상황도 존재한다. 단순히 편의때문에 사용해서는 안된다.this.$root
나global event bus
보다 `Vuex가 선호된다. 간단한 어플리케이션에서는 편리할 수 있지만, 대부분의 어플리케이션에서 Vuex를 사용하는 편이 낫다.
위 내용이 도움이 되셨다면 아래의 광고를 눌러주시면 블로그 운영에 도움이 됩니다 : )
반응형
'개발 > 프론트엔드' 카테고리의 다른 글
쉽고 빠른 썸네일 만들기, 퀵썸네일 (Quick Thumbnails) 소개 | 사이드 프로젝트 (36) | 2024.05.12 |
---|---|
React Three fiber(R3F)로 배우는 인터렉티브 3D 웹 개발 | 유데미 수강후기 (1) | 2024.04.28 |
웹 컴포넌트 Svelte로 만들고 배포까지 (feat. 사이드 프로젝트) (10) | 2023.12.24 |
Vue3로 프로젝트를 진행하면서 알게 된 것들 (4) | 2021.10.05 |
vue에서 node_modules모듈 babel 문제해결 (0) | 2020.02.09 |