Vue_convention - upswp/THXSTORE GitHub Wiki
Vue convention
ํ์ ์ฌํญ
- ๋ณ์, ํจ์๋ช
:
- ๋ ๋จ์ด ์ด์์ผ ๊ฒฝ์ฐ camelCase๋ฅผ ๋ฐ๋์ ์ค์.
- Vue ํ์ผ ์ด๋ฆ
- ํ์ฅ์๊ฐ vue์ธ ํ์ผ์ ์ด๋ฆ์ PaskalCase๋ฅผ ์ค์.
- ๋ฐ๋์ ๋๋จ์ด ์ด์์ ์กฐํฉํ ๊ฒ. ์) LoginForm, MainPage
- ๋๋จ์ด๊ฐ ๋ง๋ค๊ธฐ ์ด๋ ค์ธ ๊ฒฝ์ฐ์๋ The๋ฅผ ๋ถ์ผ ๊ฒ. ์) TheHeader
- vue ํ์ผ์ด๋ฆ์ ๋ค์๊ณผ ๊ฐ์ ์์์ผ๋ก ์ ์ ๊ฒ
- {FuntionTask}, ์) LoginForm, PostAddForm, PostEditForm
- {PropertyRole}, ์) BounceSpinner, BigButton, MainHeader
- ํ์ผ ์ฐธ์กฐ
- ํ์ผ ์ฐธ์กฐ๋ '@'๋ฅผ ํ์ฉํ ์ ๋๊ฒฝ๋ก๋ก ์ธ ๊ฒ์ ๊ถ์ฅ.
- ๋ฆฌํฉํ ๋ง์ ํ์ผ์์น๊ฐ ๋ฐ๋ ๋๋ง๋ค ์๋ ๊ฒฝ๋ก๋ฅผ ์ฒดํฌํด์ผํ๊ธฐ ๋๋ฌธ.
์) import MainHeader from '../component/common/MainHeader' (x), import MainHeader from '@/componenet/common/MainHeader' (o),
- ํ์ผ ์ฐธ์กฐ๋ '@'๋ฅผ ํ์ฉํ ์ ๋๊ฒฝ๋ก๋ก ์ธ ๊ฒ์ ๊ถ์ฅ.
- src ํด๋ ๋ฐ ํ์ ํด๋
- components ํด๋
- view ํด๋์ ํ์ผ์ ๊ธฐ๋ฅ ๋จ์๋ก ์ชผ๊นฌ component๋ค์ ์งํฉ
- ์์) MainPage์ Header, Body, Footer๋ก ๊ธฐ๋ฅ์ ๋๋ ๊ฒฝ์ฐ, MainBody, MainHeader, MainFooter๋ฑ์ ํํ๋ก ์ปดํฌ๋ํธ ์์ฑํ ๊ฒ.
- views ํด๋์ ๊ฐ์ด ๋ชฉ์ ์ ๋ฐ๋ผ ํด๋ ๋ถ๋ฅ๊ฐ ๊ฐ๋ฅ
- ๊ณตํต์ ์ผ๋ก ์ฌ์ฉ์ด ๊ฐ๋ฅํ ์ปดํฌ๋ํธ๋ common ํด๋์ ์ ์ฅํ ๊ฒ. ์) components/common
- view ํด๋์ ํ์ผ์ ๊ธฐ๋ฅ ๋จ์๋ก ์ชผ๊นฌ component๋ค์ ์งํฉ
- views ํด๋
- router-view๋ฅผ ํตํด ์ด๋ํ vueํ์ผ๋ง ์ฌ๊ธฐ์ ํฌํจ๋จ
- ๋ชฉ์ ์ ๋ฐ๋ผ ํด๋ ์์ฑ ๊ฐ๋ฅ. ์) views/qna
- views ํด๋ ์์ vue ํ์ผ๋ค์ ์ด๋ฆ์ด ๋ฐ๋์ Page๋ก ๋๋๋ค. ์) NotFoundPage.vue
- assets ํด๋
- ์ด๋ฏธ์ง, svg, CSS, SCSS์ ๊ฐ์ ๋ฆฌ์์ค ํ์ผ์ ๊ด๋ฆฌํ ํด๋
- router ํด๋
- index.js๋ฅผ ๊ธฐ๋ณธ์ผ๋ก router link๋ฅผ ๋ฑ๋กํ๋ค.
- path๋ "/{๊ธฐ๋ฅ}/{์์ฑ}" ํํ๋ก ์ ๋๋ค. ์) "/login", "/post/:id" (๋์ ํ ๋น์ ๊ฒฝ์ฐ)
- component ๋ฑ๋ก์ ๋น ๋ฅธ ๋ก๋ฉ์ ์ํด ์ฝ๋ ์คํ๋ฆฌํ
์ ์ฌ์ฉํ๋ค.
- component: MainPage (x)
- component: () => import('@/views/MainPage.vue) (o)
- ๋ค๋น๊ฒ์ด์
๊ฐ๋๋ฅผ ์ฌ์ฉํ๊ณ ์ ํ ๊ฒฝ์ฐ
- ๋ชจ๋ url์ ๋ํ ๊ฒ์ฌ๋ฅผ ์ํ ๊ฒฝ์ฐ => ์ ์ญ ๊ฐ๋
- ํน์ url์ ๋ํ ๊ฒ์ฌ๋ฅผ ์ํ ๊ฒฝ์ฐ => ๋ผ์ฐํฐ ๊ฐ๋
- ํน์ view ์ปดํฌ๋ํธ์ ๋ค์ด๊ฐ ๋, ๋๋ ๋๊ฐ ๋ ๊ฒ์ฌ๋ฅผ ์ํ ๊ฒฝ์ฐ => ์ปดํฌ๋ํธ ๊ฐ๋
- 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ํจ์๋ฅผ ์ฌ์ฉํด์ ๋ถ๋ฌ ์ฌ ๊ฒ.
- utils ํด๋
- ์ฌ๋ฌ ํ์ผ์์ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ํจ์๋ค์ ๋ฐ๋ก ์ ์ฅํด๋ ํด๋
- utils ํด๋ ์ ํ์ผ๋ช ์ camelCase์ ์ค์ํ๋ค.
- cookies ๋๋ validation, filter์ ๊ฐ์ด ๊ณตํต์ ์ผ๋ก ์ฌ์ฉ์ด ๊ฐ๋ฅํ ํจ์๋ค์ ๊ธฐ๋ฅ๋ณ๋ก ์ ์ฅํ๋ค.
- api ํด๋
- api ๊ด๋ฆฌ๋ฅผ ์ํด์ ๊ธฐ๋ฅ๋ณ๋ก ๋ถ๋ฅํ ํด๋
- ๊ธฐ๋ฅ๋ณ๋ก js ํ์ผ์ ๊ตฌ๋ถํด์ index.js์ ๋ฑ๋กํจ
- baseURL์ .env.local ํ์ผ๋ก ๊ด๋ฆฌ
- components ํด๋
๊ถ์ฅ ์ฌํญ
- store ์ฌ์ฉ
- template ์์ ๋งํฌ์
์์ ์ด๋ฒคํธ ์ฒ๋ฆฌ์ ๋์ํ $store ํจ์๊ฐ ๊ธธ์ด๊ฐ ์งง๋๋ผ๋ method์ ๊ธฐ์ ํ ๊ฒ์ ๊ถ์ฅ
-์)
<div @click="$store.state.id=3"> (X) //////////////////////////////////// <div @click="assign3"> (O) method:{ assign3(){ // ๋จ์ํ ์์๋ก ์ ๊ธดํ์ง๋ง, ์ ๋งํด์๋ mutation์ผ๋ก ๊ฐ ํ ๋น ์ํฌ ๊ฒ. this.$store.state.id=3 } }
- template ์์ ๋งํฌ์
์์ ์ด๋ฒคํธ ์ฒ๋ฆฌ์ ๋์ํ $store ํจ์๊ฐ ๊ธธ์ด๊ฐ ์งง๋๋ผ๋ method์ ๊ธฐ์ ํ ๊ฒ์ ๊ถ์ฅ
-์)
- Vuex mapGetters ํฌํผ ์ฌ์ฉ
- computed์ this.$store.getters๋ก ์ง์ ์ ๊ทผํ์ง๋ง๊ณ ...mapGetters([...,...,]) ์์ผ๋ก ๋ถ๋ฌ์ค์. ์ฐธ์กฐ