Vue_convention - upswp/THXSTORE GitHub Wiki

Vue convention


ํ•„์ˆ˜ ์‚ฌํ•ญ

  1. ๋ณ€์ˆ˜, ํ•จ์ˆ˜๋ช…:
    • ๋‘ ๋‹จ์–ด ์ด์ƒ์ผ ๊ฒฝ์šฐ camelCase๋ฅผ ๋ฐ˜๋“œ์‹œ ์ค€์ˆ˜.
  2. Vue ํŒŒ์ผ ์ด๋ฆ„
    • ํ™•์žฅ์ž๊ฐ€ vue์ธ ํŒŒ์ผ์˜ ์ด๋ฆ„์€ PaskalCase๋ฅผ ์ค€์ˆ˜.
    • ๋ฐ˜๋“œ์‹œ ๋‘๋‹จ์–ด ์ด์ƒ์„ ์กฐํ•ฉํ•  ๊ฒƒ. ์˜ˆ) LoginForm, MainPage
      • ๋‘๋‹จ์–ด๊ฐ€ ๋งŒ๋“ค๊ธฐ ์–ด๋ ค์šธ ๊ฒฝ์šฐ์—๋Š” The๋ฅผ ๋ถ™์ผ ๊ฒƒ. ์˜ˆ) TheHeader
      • vue ํŒŒ์ผ์ด๋ฆ„์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์–‘์‹์œผ๋กœ ์ ์„ ๊ฒƒ
        • {FuntionTask}, ์˜ˆ) LoginForm, PostAddForm, PostEditForm
        • {PropertyRole}, ์˜ˆ) BounceSpinner, BigButton, MainHeader
  3. ํŒŒ์ผ ์ฐธ์กฐ
    • ํŒŒ์ผ ์ฐธ์กฐ๋Š” '@'๋ฅผ ํ™œ์šฉํ•œ ์ ˆ๋Œ€๊ฒฝ๋กœ๋กœ ์“ธ ๊ฒƒ์„ ๊ถŒ์žฅ.
      • ๋ฆฌํŒฉํ† ๋ง์— ํŒŒ์ผ์œ„์น˜๊ฐ€ ๋ฐ”๋€” ๋•Œ๋งˆ๋‹ค ์ƒ๋Œ€ ๊ฒฝ๋กœ๋ฅผ ์ฒดํฌํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ.
      ์˜ˆ) 
      import MainHeader from '../component/common/MainHeader' (x),
      import MainHeader from '@/componenet/common/MainHeader' (o),
      
  4. src ํด๋” ๋ฐ‘ ํ•˜์œ„ ํด๋”
    1. components ํด๋”
      • view ํด๋”์˜ ํŒŒ์ผ์„ ๊ธฐ๋Šฅ ๋‹จ์œ„๋กœ ์ชผ๊นฌ component๋“ค์˜ ์ง‘ํ•ฉ
        • ์˜ˆ์‹œ) MainPage์˜ Header, Body, Footer๋กœ ๊ธฐ๋Šฅ์„ ๋‚˜๋ˆŒ ๊ฒฝ์šฐ, MainBody, MainHeader, MainFooter๋“ฑ์˜ ํ˜•ํƒœ๋กœ ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑํ•  ๊ฒƒ.
      • views ํด๋”์™€ ๊ฐ™์ด ๋ชฉ์ ์— ๋”ฐ๋ผ ํด๋” ๋ถ„๋ฅ˜๊ฐ€ ๊ฐ€๋Šฅ
      • ๊ณตํ†ต์ ์œผ๋กœ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•œ ์ปดํฌ๋„ŒํŠธ๋Š” common ํด๋”์— ์ €์žฅํ•  ๊ฒƒ. ์˜ˆ) components/common
    2. views ํด๋”
      • router-view๋ฅผ ํ†ตํ•ด ์ด๋™ํ•  vueํŒŒ์ผ๋งŒ ์—ฌ๊ธฐ์— ํฌํ•จ๋จ
      • ๋ชฉ์ ์— ๋”ฐ๋ผ ํด๋” ์ƒ์„ฑ ๊ฐ€๋Šฅ. ์˜ˆ) views/qna
      • views ํด๋” ์•ˆ์˜ vue ํŒŒ์ผ๋“ค์€ ์ด๋ฆ„์ด ๋ฐ˜๋“œ์‹œ Page๋กœ ๋๋‚œ๋‹ค. ์˜ˆ) NotFoundPage.vue
    3. assets ํด๋”
      • ์ด๋ฏธ์ง€, svg, CSS, SCSS์™€ ๊ฐ™์€ ๋ฆฌ์†Œ์Šค ํŒŒ์ผ์„ ๊ด€๋ฆฌํ•  ํด๋”
    4. router ํด๋”
      • index.js๋ฅผ ๊ธฐ๋ณธ์œผ๋กœ router link๋ฅผ ๋“ฑ๋กํ•œ๋‹ค.
      • path๋Š” "/{๊ธฐ๋Šฅ}/{์†์„ฑ}" ํ˜•ํƒœ๋กœ ์ ๋Š”๋‹ค. ์˜ˆ) "/login", "/post/:id" (๋™์ ํ• ๋‹น์˜ ๊ฒฝ์šฐ)
      • component ๋“ฑ๋ก์€ ๋น ๋ฅธ ๋กœ๋”ฉ์„ ์œ„ํ•ด ์ฝ”๋“œ ์Šคํ”Œ๋ฆฌํŒ…์„ ์‚ฌ์šฉํ•œ๋‹ค.
        • component: MainPage (x)
        • component: () => import('@/views/MainPage.vue) (o)
      • ๋„ค๋น„๊ฒŒ์ด์…˜ ๊ฐ€๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ ์ž ํ•  ๊ฒฝ์šฐ
        • ๋ชจ๋“  url์— ๋Œ€ํ•œ ๊ฒ€์‚ฌ๋ฅผ ์›ํ•  ๊ฒฝ์šฐ => ์ „์—ญ ๊ฐ€๋“œ
        • ํŠน์ • url์— ๋Œ€ํ•œ ๊ฒ€์‚ฌ๋ฅผ ์›ํ•  ๊ฒฝ์šฐ => ๋ผ์šฐํ„ฐ ๊ฐ€๋“œ
        • ํŠน์ • view ์ปดํฌ๋„ŒํŠธ์— ๋“ค์–ด๊ฐˆ ๋•Œ, ๋˜๋Š” ๋‚˜๊ฐˆ ๋•Œ ๊ฒ€์‚ฌ๋ฅผ ์›ํ•  ๊ฒฝ์šฐ => ์ปดํฌ๋„ŒํŠธ ๊ฐ€๋“œ
    5. store ํด๋”
      • ๋ฐ์ดํ„ฐ๋ฅผ ์ „์—ญ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š” ํด๋”. cookie๋‚˜ localstorage๋ž‘ ์—ฐ๊ณ„ ๊ฐ€๋Šฅ
      • index.js๋ฅผ ๊ธฐ๋ณธ์œผ๋กœ ํ•˜๊ณ  ์ฝ”๋“œ๊ฐ€ ๊ธธ์–ด์งˆ ๊ฒฝ์šฐ, state, getters, actions, mutations๋ฅผ ๋ชจ๋“ˆํ™”ํ•ด์„œ index.js์— importํ•  ๊ฒƒ
      • state์˜ property ํ‚ค๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋‹จ์–ด๋ฅผ ์“ธ ๊ฒƒ.
        • ์˜ˆ) id, token
      • getters์˜ ํ•จ์ˆ˜๋Š” ,๋‹จ์ˆœํžˆ state์˜ ํ‚ค๋ฅผ ๊ฐ€์ ธ์˜ฌ ๊ฒฝ์šฐ, get{State}(state, ...args) ํ˜•ํƒœ๋กœ ์“ธ ๊ฒƒ.
        • ์˜ˆ) getId(state), getToken(state)
      • mutations์˜ ํ•จ์ˆ˜๋Š” {functionState}(state, ...args) ํ˜•ํƒœ๋กœ ์“ธ ๊ฒƒ.
        • ์˜ˆ) setId(state), clearUserInfo(state)
        • ๋งŒ์•ฝ state๋ฅผ ํ•œ๋ฒˆ์— ์—ฌ๋Ÿฌ๊ฐœ ์ฒ˜๋ฆฌํ•  ๊ฒฝ์šฐ, ๊ฐ๊ฐ์˜ ํ•จ์ˆ˜๋ฅผ ๋”ฐ๋กœ ๋งŒ๋“ค์–ด์ค„ ๊ฒƒ.
        • ์˜ˆ) clearId(state), clearToken(state)
      • actions์˜ ํ•จ์ˆ˜๋Š” {FUNCTION}({commit},...args) ํ˜•ํƒœ๋กœ ์“ธ ๊ฒƒ.
        • ์˜ˆ) LOGIN({commit}, userData)
      • ์™ ๋งŒํ•ด์„œ๋Š” helperํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋ถˆ๋Ÿฌ ์˜ฌ ๊ฒƒ.
    6. utils ํด๋”
      • ์—ฌ๋Ÿฌ ํŒŒ์ผ์—์„œ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•  ํ•จ์ˆ˜๋“ค์„ ๋”ฐ๋กœ ์ €์žฅํ•ด๋‘” ํด๋”
      • utils ํด๋” ์•ˆ ํŒŒ์ผ๋ช…์€ camelCase์„ ์ค€์ˆ˜ํ•œ๋‹ค.
      • cookies ๋˜๋Š” validation, filter์™€ ๊ฐ™์ด ๊ณตํ†ต์ ์œผ๋กœ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•œ ํ•จ์ˆ˜๋“ค์€ ๊ธฐ๋Šฅ๋ณ„๋กœ ์ €์žฅํ•œ๋‹ค.
    7. api ํด๋”
      • api ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด์„œ ๊ธฐ๋Šฅ๋ณ„๋กœ ๋ถ„๋ฅ˜ํ•  ํด๋”
      • ๊ธฐ๋Šฅ๋ณ„๋กœ js ํŒŒ์ผ์„ ๊ตฌ๋ถ„ํ•ด์„œ index.js์— ๋“ฑ๋กํ•จ
      • baseURL์€ .env.local ํŒŒ์ผ๋กœ ๊ด€๋ฆฌ

๊ถŒ์žฅ ์‚ฌํ•ญ

  1. store ์‚ฌ์šฉ
    • template ์•ˆ์˜ ๋งˆํฌ์—…์—์„œ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ์‹œ ๋™์ž‘ํ•  $store ํ•จ์ˆ˜๊ฐ€ ๊ธธ์ด๊ฐ€ ์งง๋”๋ผ๋„ method์— ๊ธฐ์ˆ ํ•  ๊ฒƒ์„ ๊ถŒ์žฅ -์˜ˆ)
       <div @click="$store.state.id=3"> (X) 
       ////////////////////////////////////
       <div @click="assign3"> (O) 
       method:{
           assign3(){
               // ๋‹จ์ˆœํ•œ ์˜ˆ์‹œ๋กœ ์ ๊ธดํ–ˆ์ง€๋งŒ, ์™ ๋งŒํ•ด์„œ๋Š” mutation์œผ๋กœ ๊ฐ’ ํ• ๋‹น ์‹œํ‚ฌ ๊ฒƒ.
               this.$store.state.id=3
           }
       }
      
  2. Vuex mapGetters ํ—ฌํผ ์‚ฌ์šฉ
    • computed์— this.$store.getters๋กœ ์ง์ ‘ ์ ‘๊ทผํ•˜์ง€๋ง๊ณ  ...mapGetters([...,...,]) ์‹์œผ๋กœ ๋ถˆ๋Ÿฌ์˜ค์ž. ์ฐธ์กฐ