vue best practice

2023. 5. 8. 09:40· 프론트엔드/vue
목차
  1. 1. v-for문 안에서 v-if를 쓰지 않는다.
  2. 2. created나 watch에서 methods를 사용하지 않는다.
  3. 3. prop의 형식을 지정해준다.
  4. 4. 그 외 스타일 가이드 ( 공식문서상 강력권장됨)

1. v-for문 안에서 v-if를 쓰지 않는다.

이유 : v-for문이 실행 된 후 v-if문이 실행되기 때문에, if문 조건에 따라 분기처리 되는게 아니라 for문을 도는 모든 요소을 다 거치게 된다.

해결 : computed에서 for문을 돌릴 배열을 만들어 그 값을 v-for로 사용한다.

         → 로직과 마크업 코드를 분리하여 가독성 증가

         → 리렌더링 될 때마다 매번 for문이 실행되는게 아니라, computed 값이 바뀌었을 때만 다시 실행될 것이다.

<div v-for='product in cheapProducts'>


computed: {
  cheapProducts: () => {
    return this.products.filter(function (product) {
      return product.price < 100
    })
  }
}

 

2. created나 watch에서 methods를 사용하지 않는다.

watch는 값이 변경되야 실행되기 때문에 컴포넌트 처음 초기화 단계에서는 실행되지 않기 때문

그러나 watch에서 method를 사용하여 처음에도 메서드가 실행하게끔 하려면 immediate 속성 사용

methods: {
  handleChange() {
    // stuff happens
  }
},
watch () {
  property {
    immediate: true // property값이 바뀌지 않아도 컴포넌트 생성되자마자 한번 실행됨
    handler() {
      this.handleChange()
    }
  }
}

 

3. prop의 형식을 지정해준다.

props: {
  status: {
    type: String,
    required: true,
    validator: function (value) {
      return [
        'syncing',
        'synced',
        'version-conflict',
        'error'
      ].indexOf(value) !== -1
    }
  }
}

 

4. 그 외 스타일 가이드 ( 공식문서상 강력권장됨)

1) prop 

 prop선언시는 camel case, template에서 사용시는 kebab case 사용.

이유 : js에서는 camelCase가 더 자연스럽고, html에서는 kebab-case가 더 자연스럽기 때문

// script
props: {
  greetingText: String
}

// template
<WelcomeMessage greeting-text="hi"/>

 

2) 컴포넌트 파일네임

PascalCase 또는 kebab-case 사용

이유 : 클래스, 생성장 함수 처럼 인스턴스화되서 쓰이는 것이기 때문에 PascalCase사용

이유 : 대소문자가 혼합해 쓰이면 오류날 경우도 있어서 kebab-case도 허용

MyComponent.vue (o) my-component.vue(o) , mycomponent.vue(x) myComponent.vue(x)

 

3) template에서의 컴포넌트 이름

PascalCase 또는 kebab-case 사용

(pascal이 좀 더 권장됨 : 가독성이 더 좋기때문에, 에디터가 자동으로 완성시켜주기 때문에 )

<MyComponent/>, <my-component></my-component>

 

4) jsx에서의 컴포넌트 이름

원칙 : camel case

예외 : kebab case - 전역 컴포넌트로 등록할 경우는 kebab 권장

Vue.component('MyComponent', {
  // pascal case
})

Vue.component('my-component', {
  // 전역으로 등록시는 kebab 권장
})

import MyComponent from './MyComponent.vue'

export default {
  name: 'MyComponent',
  // ...
}

 

 

참고자료

https://betterprogramming.pub/12-vuejs-best-practices-for-pro-developers-28d1f629018c 

'프론트엔드 > vue' 카테고리의 다른 글

v-model 에 대해  (0) 2023.05.12
v-slot  (0) 2023.05.10
data 초기값을 computed로 할 수 없는 이유  (0) 2023.04.14
[vue2] slot  (0) 2023.03.26
[vue router] a태그와 router-link의 차이  (0) 2023.03.26
  1. 1. v-for문 안에서 v-if를 쓰지 않는다.
  2. 2. created나 watch에서 methods를 사용하지 않는다.
  3. 3. prop의 형식을 지정해준다.
  4. 4. 그 외 스타일 가이드 ( 공식문서상 강력권장됨)
'프론트엔드/vue' 카테고리의 다른 글
  • v-model 에 대해
  • v-slot
  • data 초기값을 computed로 할 수 없는 이유
  • [vue2] slot
journey-dev
journey-dev
journey-devjourney-dev 님의 블로그입니다.
journey-dev
journey-dev
journey-dev
전체
오늘
어제
  • 분류 전체보기 (63)
    • 프론트엔드 (44)
      • JS (8)
      • React (8)
      • vue (9)
      • Typescript (2)
    • CS (0)
      • 자료구조&알고리즘 (2)
      • 네트워크 (2)
    • 개발서적 (1)
      • 코어 자바스크립트 (0)
      • 프론트엔드 성능 최적화 가이드 (1)
    • DB (11)
      • SQL (11)
    • GIT (0)
    • GIS (3)
    • 개발일기 (0)
    • ing (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • 일단 시작해라. 나중에 완벽해지면 된다.

인기 글

태그

  • 리액트 복기하기!

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
journey-dev
vue best practice
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.