2022. 5. 24. 05:30ใFront-End ์์ ์ค/Nuxt.js
Git Hub
"์ด ํฌ์คํ ์ ์ฟ ํก ํํธ๋์ค ํ๋์ ์ผํ์ผ๋ก, ์ด์ ๋ฐ๋ฅธ ์ผ์ ์ก์ ์์๋ฃ๋ฅผ ์ ๊ณต๋ฐ์ต๋๋ค."
๐ ๋ชฉ์ฐจ
โ [Vue+Nuxt.js] Nuxt.js ๊ธฐ๋ณธ
โ[Vue+Nuxt.js] Nuxt.js ์์ํ๊ธฐ
โ [Vue+Nuxt.js] Nuxt.js Data ํธ์ถ ๋ฐฉ์๊ณผ API ์ฐ๋
โ[Vue+Nuxt.js] Nuxt.js๋ฅผ ์ด์ฉํ์ฌ ์ผํ ์ํ ๋ชฉ๋ก ํ์ด์ง์ ์์ธ ํ์ด์ง ๊ฐ๋ฐ
โ [Vue+Nuxt.js] Nuxt.js๋ฅผ ์ด์ฉํ์ฌ ์ผํ ์ํ ๊ฒ์ UI ๊ฐ๋ฐ
โ[Vue+Nuxt.js] Vuex๋ฅผ ์ด์ฉํ์ฌ ์ฅ๋ฐ๊ตฌ๋ Page ๋ง๋ค๊ธฐ
โ [Vue+Nuxt.js] Vuex ์๋ก๊ณ ์นจ ์ ์ด๊ธฐํ ๋๋ ๋ฌธ์ ํด๊ฒฐ
๐ ๋ถ๋ก
โ [FrontEnd] HMR(Hot Module Replacement)
โ [Nuxt.js] ๋น๋๊ธฐ ๋ฐ์ดํฐ ํธ์ถ ๋ฐฉ๋ฒ
โ V-Model ๋์ ์๋ฆฌ์ ํ์ฉ ๋ฐฉ๋ฒ
โ [Nuxt.js] NuxtServerInit
๐ ๋ด๊ฐ ๋ง๋ Error
โ [vuex] expects string as the type, but found undefined.
๐ Nuxt.js๋ฅผ ์ด์ฉํ์ฌ ๊ฐ๋ฐํ๊ธฐ
๐ฝ ์ํ Page
๐ฆ ์ํ ๋ชฉ๋ก ํ์ ๊ธฐ๋ฅ ๊ตฌํ
์ต์ด Back End๊ฐ ๊ฐ์ง๊ณ ์๋ ์ํ ๋ชฉ๋ก์ ์์๊ฒ ํ๋ฒ ์ถ๋ ฅ ํด ๋ณผ๊ฒ์.
๋จผ์ `<ul>` Tag๋ฅผ ๊ฐ์ผ ๋ค 7๋ฒ์งธ ์ค์ `<li>` Tag๋ฅผ ์ด์ฉํ์ฌ `v-for`๋ฅผ ํตํด 28๋ฒ์งธ ์ค์์ ๋ฐํ๋ `products`์ ๋ชฉ๋ก์ `product`๋ผ๋ ๋ณ์์ for๋ฌธ์ด ๋๋ฉด์ ๋ด๊ธฐ๊ฒ ํ๊ณ , `product`์ id๊ฐ์ `:key`๋ฅผ ์ด์ฉํ์ฌ Unique ๊ฐ์ ์ง์ ํด ์ฃผ์์ด์.
๊ทธ๋ฐ ๋ค ํด๋น ๋ด์ฉ์ ์ถ๋ ฅํ ์ ์๊ฒ 8๋ฒ์งธ ์ค๊ณผ ๊ฐ์ด ์์
์ ํด ์ฃผ์์ต๋๋ค.
์์ฃผ ์์๊ฒ ์ ๋ ฌ์ด ๋์ ์ถ๋ ฅ ๋๋ ๊ฒ์ ํ์ธํ ์ ์์ด์.
์์ ๋ด์ฉ์ ๋ณด๋ฉด Image๊ฐ ์๋ ๊ฒ์ ํ์ธํ ์ ์์ด์. ์ด Image๋ฅผ ํ๋ฉด์ ๊ทธ๋ ค์ฃผ๋ฉด์ ๊ทธ Image ๋ฐ์ ์ด๋ฆ๊ณผ ๊ฐ๊ฒฉ ์ ๋ณด๋ฅผ ํ๋ฒ ์ถ๋ ฅํด ๋ณผ๊ฒ์!
์ถ๊ฐ๋ ๋ถ๋ถ์ 10 ~ 14๋ฒ์งธ ์ค์ด์์. ๋จผ์ `<img>` Tag๋ฅผ ํตํด Image ์์น(:src)๋ฅผ ์ง์ ํด ์ฃผ๊ณ , ํด๋น Image๊ฐ ์ถ๋ ฅ๋์ง ์์์ ๋ ๋์ฒด Text ๊ฐ (: alt)์ ์ฃผ์์ต๋๋ค.
๊ทธ๋ฐ ๋ค ์ฌ์ง ๋ฐ์ ์ด๋ฆ๊ณผ ๊ฐ๊ฒฉ์ด ํ์๋๋๋ก ์์
์ ํด ์ฃผ์์ด์.
๋ฐ์ ๋ ์์ง๋ง, ์ด ๋ถ๋ถ๋ง ์ฌ๋ ค ๋๋๋ก ํ ๊ฒ์.
๋ฌธ์ ๋ ํ์ฌ ์ฌ์ง์ด ๋ชจ๋ ๊ฐ์ ๊ฒ์ด ์ถ๋ ฅ๋๊ณ ์๋ ๊ฒ์ด์์.
์ด ๋ถ๋ถ์ API๋ฅผ ์ ๊ณตํ๋ ์๋ฒ์ ํน์ฑ ๋๋ฌธ์ธ๋ฐ, ์ด๋ฅผ ๋ฌ๋ฆฌํ๊ธฐ ์ํด ์กฐ๊ธ ์์ ์ ํด ๋ณผ๊ฒ์.
์์ ๊ฐ์ด 47๋ฒ์งธ ์ค์ API ์๋ต๊ฐ์ผ๋ก ๋ฐ์์จ ๊ฐ์ ๋ชฉ๋ก ๋ฐฐ์ด ๊ฐ(data)์ `map()`๋ฅผ ์ด์ฉํ์ฌ ๊ฐ๊ฐ์ ๋ฐฐ์ด ์์๋ฅผ ๋ฐํ ๋ฐ๊ธฐ ์ํด ์ถ๊ฐ๋ฅผ ํ๊ณ , ์ฌ๊ธฐ์ item์ ๋งค๊ฐ๋ณ์๋ก ๋ฃ์ด์ค ๋ค Body์ ๋ฐํ ๋ด์ฉ์ผ๋ก ์ต์ด 49๋ฒ์งธ ์ค์ ์ธ์๊ฐ์ผ๋ก ์
๋ ฅ๋ item์ ๋ค์ด ์๋ id, name, image, price ์ ๋ณด๋ฅผ ํ์ด ๊ฐ์ฒด(key : value)๋ก ์ ์ฅํด ์ฃผ์์ด์.
๊ทธ๋ฐ ๋ค 51๋ฒ์งธ ์ค์ `imageUrl` ๊ฐ์ฒด์ item์์ ์๋ imageUrl์ random ํจ์๋ฅผ ๋๋ ค Image๊ฐ ๋ค๋ฅธ ๊ฒ๋ค์ด ์ถ๋ ฅ๋๋๋ก ํด ์ค ๊ฒ์ด์์.
๐ฆ Routing ๋ฐ Styling
์ต์ด `main.vue`์ ์๋ ๋ชจ๋ Code๋ฅผ 'index.vue'์ ์ฎ๊ฒจ ์ฃผ๊ณ , `main.vue`๋ ์ญ์ ํด ์ฃผ์ธ์.
๊ทธ๋ฐ ๋ค ์๋์ ๊ฐ์ด CSS Code๋ฅผ ์
๋ ฅ ํด ์ค ๊ฒ์ด์์.
๊ทธ๋ฐ ๋ค CSS๋ฅผ ์ด์ฉํด์ ์์ ๊ฐ์ด ์
๋ ฅ์ ํด ์ฃผ๋ฉด ์๋์ ๊ฐ์ด ์ข ๋ ๊น๋ํ Page๋ฅผ ๋ง๋ ์ ์์ด์.
๐ฆ ์์ธ ํ์ด์ง ๊ตฌํ์ ์ํ ์ฌ์ ์์
์ต์ด ํ์ ์๋ ๋ถ๋ถ์ ์ ๋ฆฌ๋ฅผ ํ๋๋ก ํ ๊ฒ์.
์ด์ ์ ์ฐ๋ฆฌ๋ `layouts` ๋ฐ์ `default.vue`์ ๊ณตํต์ ์ผ๋ก ๋์ฌ ์ ์๋ ๋ด์ฉ์ ์ถ๊ฐ ํด ์ค ๊ฒ์ด์์.
๋ฐ๋ก ์์ ๊ฐ์ ๋ด์ฉ์ด์์ฃ .
์ด ๋ถ๋ถ์ ์ ๋ฆฌ ํ๋๋ก ํ ๊ฒ์.
์์ ๊ฐ์ด ์ ๋ฆฌ๋ฅผ ํด ์ฃผ์๋ฉด ๋ฉ๋๋ค.
๊ทธ๋ฐ ๋ค ์ 4๋ฒ์งธ ์ค์ `<h1>` Tag ๋ด์ฉ๊ณผ 12๋ฒ์งธ ์ค ๋ด์ฉ๋ ์ญ์ ํ๋๋ก ํ๊ฒ ์ต๋๋ค.
์ด๋ ๊ฒ ๊น๋ํ๊ฒ ์ ๋ฆฌ๋ฅผ ํด ๋ณด์์ด์.
๐ฆ Nuxt.js ๋์ ๋ผ์ฐํ
์ต์ด `index.vue`์ 9๋ฒ์งธ `<li>` Tag ์์ `v-on:click`์ ์ถ์ฝํ `@click`์ ์ด์ฉํ์ฌ ํด๋น Tag์ Click Event๊ฐ ๋ฐ์ํ๋ฉด `moveToDeatailPage()`์ `product`์ id๊ฐ์ ๋๊ธฐ๋๋ก ํ์์ด์.
๊ทธ๋ฐ ๋ค 58 ~ 64๋ฒ์งธ ์ค ์ฒ๋ผ `methods` ๊ฐ์ฒด๋ฅผ ์ ์ธํ๊ณ , ๊ทธ ์์ `moveToDetailPage()`๋ฅผ ์ ์ธํ๊ณ , ๋งค๊ฐ ๋ณ์๋ก id๋ฅผ ๋ฐ๋๋ก ํ ๋ค์ Cosole๋ก ํด๋น ๋ด์ฉ์ ์ฐ์ด๋ณด๋๋ก ํ์์ด์.
์์ ๊ฐ์ด `<li>` Tag ์์ ๋ด์ฉ์ ํด๋ฆญํ๋ฉด ๊ฐ๋ฐ์ ๋๊ตฌ์์ ํด๋น ๊ฐ์ด ์ถ๋ ฅ๋๋ ๊ฒ์ ํ์ธํ ์ ์์ด์.
์ด๋ฒ์๋ Nuxt.js์ ๋์ ๋ผ์ฐํ
์ ์ด์ฉํด ๋ณผ ๊ฒ์ด์์.
์ด์ ์ ์ฃผ๋ํ๋์ Vue.js๋ฅผ ํตํด Project๋ฅผ ํ๋ฉด์ Page Re Rendering์ด ํ์ํ๋ฉด Router๋ฅผ ๊ตฌ์ฑํ๊ณ , ํด๋น Router๋ฅผ ํตํด ์ด๋ํ ์ ์๊ฒ ์์
์ ํด ์ค ๊ฒ์ด์์. ํด๋น ๋ด์ฉ์ ๊ธฐ๋ณธ ๋ด์ฉ์ ์ ๋ฆฌ๋ `์ด ๊ณณ`์ ์ค๋น ํด ๋์์ด์!
๊ทธ๋ฐ๋ฐ, Nuxt.js๋ Vue.js์๋ ๋ฌ๋ฆฌ ์๋์ผ๋ก Router๋ฅผ ๊ด๋ฆฌํด ์ฃผ๊ธฐ ๋๋ฌธ์ 64๋ฒ์งธ ์ค์ฒ๋ผ `this` Keyword๋ฅผ ์ด์ฉํด Router๋ฅผ ํธ์ถํ ๋ค `push()`์์ ์ด๋ํ ์ ๋ณด๋ฅผ ์
๋ ฅํด ์ฃผ๋ฉด ๋๋๋ ๊ฒ์ด์์.
์ฃผ๋ํ๋์ `pages` Package ๋ฐ์ `detail`์ด๋ผ๋ Package๋ฅผ ๋ง๋ค์๊ณ , ๊ทธ ๋ฐ์ `_id.vue`๋ฅผ ๋ง๋ค์ด ์ฃผ์์ด์.
์ค๋ฌด์ ํฌ์
ํด์ ๋ณด๋ ์ด ๋ด์ฉ์ด ์์ฃผ ์ค์ํ ๋ถ๋ถ์ผ๋ก ์๊ฐ๋์.
์ฃผ๋ํ๋์ /pages/index.vue์ 64๋ฒ์งธ ์ค์ router๋ฅผ ์ด์ฉํ์ฌ `push()`์ ๋งค๊ฐ ๋ณ์ ๊ฐ์ผ๋ก `detail/${id}`๋ฅผ ๋ฃ์ด์ฃผ์์ด์.
์ฌ๊ธฐ์ ์ฃผ๋ํ๋์ "์~~~"๋ฅผ ์ธ์น๊ฒ ๋์๋๋ฐ, pages ๋ฐ์ `push()` ๋งค๊ฐ ๋ณ์์ ๋ฌธ์์ด๋ก ์ค ์ธ์๊ฐ์ด ๊ฒฐ๊ตญ์ Package ์ด๋ฆ์ด ๋ ๊ฒ์ด๊ณ , ๋ฆฌํฐ๋ด ๋ฌธ๋ฒ์ ์ด์ฉํ์ฌ id๊ฐ์ ๋๊ธด๋ค๋ฉด ์๋กญ๊ฒ ์์ฑํ Page Component๋ `_id.vue`๋ก ๋ง๋ค์ด ์ฃผ๋ฉด ๋๋ ๊ฒ์ด์์.
์ฆ Vue.js๋ฅผ ํตํด Page๋ฅผ ๋ง๋ค ๋๋ `detail.vue` ๋ฑ์ ์ด๋ฆ์ ์ ํด์ฃผ์์ง๋ง, ์ด๋ ๊ฒ ์ด๋ฆ์ด ์ ํด์ ธ ์๋ค๊ณ ๋ณด๋ฉด ๋๋ ๊ฒ์ด์์.
์ด๋ ๊ฒ ํด์ฃผ๋ฉด ๊ฒฐ๊ตญ `_`๋ `/`์ Matching์ด ๋๋ค๊ณ ๋ณด๋ฉด ๋๊ณ , `{id}`๋ `id.vue`์ Matching์ด ๋๋ค๊ณ ์๊ฐํ๋ฉด ์์ฃผ ์ดํด๊ฐ ์ฌ์ด ๊ฒ์ด์์.
์์ ๊ฐ์ด Coding์ ํ๊ณ ์ค์ ํด๋น ๋ด์ฉ์ ํด๋ฆญํด ๋ณด๋ฉด ์๋์ ๊ฐ์ด ๋ณํ๊ฐ ์๊ฒจ์.
์ต์ด ์์ ๊ฐ์ด main Page๊ฐ ์ด๋ฆฌ๊ฒ ๋์์ ๋, ์์์ ์ค๋ฅธ์ชฝ์ผ๋ก 3๋ฒ์งธ ๊ทธ๋ฆผ์ ํด๋ฆญํด ๋ณผ๊ฒ์.
๊ทธ๋ผ ์์ ๊ฐ์ด ์์ธ ํ์ด์ง๋ผ๊ณ ํด์ `/pages/detail/_id.vue`๋ก ๋ง๋ Page๋ก ์ด๋์ ํ๊ฒ ๋๊ณ , ๊ฐ๋ฐ์ ๋๊ตฌ๋ฅผ ํตํด Console.log๋ก ์ฐํ ๋ง์ง๋ง ๋ด์ฉ์ ๋ณด๊ฒ ๋๋ฉด `route`์ ์ ๋ณด๋ฅผ ํ์ธํ ์ ์๋ ๊ฒ์ด์์.
์ด๋ฒ์๋ `axios`๋ฅผ ๋ณด๋ค ๊น๋ํ๊ฒ ์ด์ฉํด ๋ณด๋๋ก ํ ๊ฒ์.
๋จผ์ Project ์ต์์ Packag์ `api` Package๋ฅผ ๋ง๋ค์ด ์ฃผ์ธ์.
๊ทธ๋ฐ ๋ค์ ์๋์ ๊ฐ์ด `index.js`๋ฅผ ๋ง๋ค์ด ์ฃผ์ธ์.
๋ฑ ๋ณด๋ฉด ์์๊ฒ ์ง๋ง, ์ด ๊ณณ์ Back End์๊ฒ ๋ณธ๊ฒฉ์ ์ผ๋ก ์์ฒญ์ ๋ณด๋ด๊ธฐ ์ํ ์ค์ ์ ํ ์ ์๋ ๊ณณ์ด์์.
ํ์ฌ Back End์ port ๋ฒํธ๋ 3000์ด๊ณ , Front End ์ฆ, Nuxt.js์ Port ๋ฒํธ๋ 4000์ผ๋ก ์ค์ ์ด ๋์ด ์์ด์.
๋จผ์ 3๋ฒ์งธ ์ค์ฒ๋ผ Instance ์์ํ ๋ณ์๋ฅผ ์ ์ธํ๋๋ฐ, `axios`์ `create()`๋ฅผ ํธ์ถํ์ฌ ๋ฐํ๊ฐ์ผ๋ก `baseURL` ๊ฐ์ฒด์ Back End ์ฃผ์์ Port ๋ฒํธ๋ฅผ ์
๋ ฅํด ์ฃผ์์ด์.
๊ทธ๋ฐ ๋ค์ 7๋ฒ์งธ ์ค์ฒ๋ผ `fetchProductById()`๋ฅผ ๋ง๋ ๋ค id๋ฅผ ๋งค๊ฐ ๋ณ์๋ก ๋ฐ๊ฒ ํ ๋ค์ ๋ฐํ ๊ฐ์ผ๋ก ์์์ ๋ง๋ instance ์์ํ ๋ณ์ ์์ `get()`(HTTP Method - get)์ ํธ์ถํ๋๋ฐ, ๊ทธ ๊ณณ์ Back End Server์ ํธ์ถํ API URI๋ฅผ ์ ์ ๋ค Parameter ๊ฐ์ ๋๊ฒจ์ฃผ๋๋ก ํด ์ฃผ์์ด์.
13๋ฒ์งธ ์ค์ ์ด๋ ๊ณณ์์๋ importํด์ ์ด์ฉํ ์ ์๊ฒ ์ ์ธํ ๊ฒ์ด์์.
์ด๋ฒ์๋ `_id.vue`์์ ์ต์ด `fetchProductById`๋ฅผ 14๋ฒ์งธ ์ค์ฒ๋ผ import๋ฅผ ํด ์ฃผ๊ณ , ์ฐ๋ฆฌ๊ฐ ๋ฐฐ์ด `asyncData()`๋ฅผ ํตํด Page๊ฐ ๊ทธ๋ ค์ง๊ธฐ ์ ์ Back End์์ Data๋ฅผ ๋ฐ์์ค๊ฒ ํด ์ค ๊ฒ์ด์์.
20๋ฒ์งธ ์ค์ `fetchProductById()`์ `parma.id`๋ฅผ ๋๊ฒจ์ฃผ์ด Back End์์ Data๋ฅผ ๋ฐ์ ์์ํ ๋ณ์ `response`์ ๋ฐ์ ๋ค ์์ ๋ด์ฉ์ ๋ค์ ์์ ํ ๋ณ์ `product`์ ๋ฃ์ด ์ฃผ์๊ณ , ๊ทธ ๋ด์ฉ์ ๋ฐํ ํด ์ฃผ์์ด์.
`asyncData()`์ ๋งค๊ฐ ๋ณ์๋ก ์
๋ ฅ๋ `{ parmas }`๋ ๋ค์์ ์ข ๋ ๊ณต๋ถํด ๋ณด๋๋ก ํ ๊ฒ์.
๊ทธ๋ฐ ๋ค 6 ~ 8๋ฒ์งธ ์ฒ๋ผ Back End์์ ๋ฐ์์จ Data๋ฅผ ๋ฟ๋ ค์ฃผ๊ธฐ ์ํด HTML Tag๋ฅผ ํตํด ์์
์ ํด ์ฃผ์์ด์.
์ต์ด Main Page์ ๋ชจ์ต์ด์์. ์ด ๊ณณ์์ ๋งจ ์์ ์ค๋ฅธ์ชฝ ์ฒซ๋ฒ์งธ ์ฌ์ง์ ๋๋ฌ ๋ณผ๊ฒ์.
์ฐ์! ๐
์ด๋ ๊ฒ Back End์์ ๋ถ๋ฌ์จ Data๋ฅผ ์์๊ฒ ๊ทธ๋ ค์ฃผ์์ด์.
๐ฆ Context ์์ฑ
์ด๋ฒ์๋ `asnyncData()`์ `Context` ์์ฑ์ ๋ํด ๊ณต๋ถ ํด ๋ณผ๊ฒ์.
`asnyncData()`์ ๋งค๊ฐ ๋ณ์(Parameter)๋ `Context` ์ธ ๊ฒ์ด์์. ์ปจํ
์คํธ ์์ฑ์ Nuxt.js Framework ์ ๋ฐ์ ๊ฑธ์ณ ๊ณต์ฉ์ผ๋ก ์ฌ์ฉ๋๋ ์์ฑ์ผ๋ก Plug In, Middleware ๋ฑ์ ์์ฑ์์๋ ์ ๊ทผํ ์ ์์ด์.
์ปจํ
์คํธ์๋ Store, Router ๊ด๋ จ ์ ๋ณด๋ฟ ์๋๋ผ SSR ์์ฒญ, ์๋ต ๊ด๋ จ๋ ์์ฑ๋ ์ ๊ทผํ ์ ์๋ต๋๋ค.
์์ ์ฝ๋
function (context) { // asyncData, plugins, middleware, ...
// Always available
const {
app,
store,
route,
params,
query,
env,
isDev,
isHMR,
redirect,
error,
$config
} = context
// Only available on the Server-side
if (process.server) {
const { req, res, beforeNuxtRender } = context
}
// Only available on the Client-side
if (process.client) {
const { from, nuxtState } = context
}
}
์์ ์ฝ๋ ๋งจ ์์ `function`๊ณผ `(context)` ์ฌ์ด์๋ `asnyncData()`๊ฐ ์๋ต๋์ด ํ๊ธฐ ๋์๋ค๊ณ ์๊ฐํด์ผ ํด์.
์ด๋ ๊ฒ ํ๊ธฐํ๋ ๊ฒ์ `ES6+ destructuring` ๋ฌธ๋ฒ์ด๋ผ๊ณ ํ๋ต๋๋ค. ์ด ๋ฌธ๋ฒ์ ๊ฐ์ฒด์ ์์ฑ์ ๋ฐ๋ก ์ ๊ทผํ๋ ๋ฌธ๋ฒ์ด์์.
`asnyncData()`๋ ์ด๋ป๊ฒ Error๋ฅผ ์ฒ๋ฆฌํ ๊น์?
์์ ์ฝ๋
export default {
async asyncData({ params, $http, error }) {
try {
const response = await axios.get(`/users/${params.id}`);
const user = response.data;
return { user }
} catch(e) {
error({ statusCode: 503, message: 'API ์์ฒญ์ด ์คํจํ์ต๋๋ค ๋ค์ ์๋ํด ์ฃผ์ธ์' })
}
}
}
์ด๋ฒ์๋ ์์ ๋ด์ฉ์ ๊ฐ์ง๊ณ , `/pages/detail/_id.vue`์ ์์
์ ํด ๋ณผ๊ฒ์.
๋จผ์ ์๋์ ๊ฐ์ด ์์ ์ ํด ์ฃผ๋๋ก ํ๊ฒ ์ต๋๋ค.
์ฐธ๊ณ ๋ก CSS์ ๋ํ ๋ด์ฉ์ ์๋์ ๊ฐ์ด ์์นํด ์์ผ๋ ํ์ํ์ ๋ถ๋ค์ ์ฃผ๋ํ๋์ Git Hub์์ ๋ด๋ ค ๋ฐ๊ธฐ ํ ์ ์์ต๋๋ค!
CSS๋ ์์ ๊ฐ์ด ์ค์ ์ ํด ์ฃผ์์ต๋๋ค.
์์ ๊ฐ์ด ์์ธ ํ์ด์ง๊ฐ ๋ง๋ค์ด์ง ๊ฒ์ ํ์ธํ ์ ์์ด์!
์์ ๊ฐ์ด ํด ๋๊ฒ ๋๋ฉด ๋ถ๋ช
์์ ๊ฐ์ด Error๊ฐ ๋ฐ์ํ ๊ฒ์ธ๋ฐ, ๊ทธ ์ด์ ๋ `<button>` Tag์์ `@click` Event๋ก ์ด๋ํ Method๋ฅผ ๋ง๋ค์ด์ฃผ์ง ์์๊ธฐ ๋๋ฌธ์ด์์.
์ด ๋ถ๋ถ์ ์ ์ ์ฃผ์์ฒ๋ฆฌ ํ๋๋ก ํ๊ฒ ์ต๋๋ค.
์ ๊น! ์ฃผ๋ํ๋์ด CSS ๊ด๋ จํด์ Git Hub ์์ ๋ด๋ ค๋ฐ๊ธฐ๋ฅผ ํด์ฃผ๋ฉด ๋๋ค๊ณ ๋ง์ ๋๋ ธ๋๋ฐ, ํด๋น File์ Nuxt.js Project์์ Global(์ ์ญ)์ ์ผ๋ก ์ฌ์ฉํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ์๋ ์ค์ ์ ํด ์ฃผ์ด์ผ ํด์.
๋จผ์ `nuxt.config.js`์ ์๋์ ๊ฐ์ด ์ค์ ์ ํด์ฃผ์
์ผ ํฉ๋๋ค.
18๋ฒ์งธ ์ค์ฒ๋ผ Global css ์ค์ ๋ถ๋ถ์ด ์๋๋ฐ, ์ด ๋ถ๋ถ์ css๊ฐ ์์นํ ๊ฒฝ๋ก๋ฅผ ์ ๋ ฅ ํด ์ฃผ๋ฉด ๋๋๊ฒ์ด์์.
๋ค์๋ฒ ๋ด์ฉ์ '์ผํ ์ํ ๊ฒ์ UI'๋ฅผ ํ๋ฒ ๊ฐ๋ฐํด ๋ณด๋ฉด์ ๊ณต๋ถ๋ฅผ ํด๋ณด๋ ค๊ณ ํด์.
"์ด ํฌ์คํ ์ ์ฟ ํก ํํธ๋์ค ํ๋์ ์ผํ์ผ๋ก, ์ด์ ๋ฐ๋ฅธ ์ผ์ ์ก์ ์์๋ฃ๋ฅผ ์ ๊ณต๋ฐ์ต๋๋ค."
'Front-End ์์ ์ค > Nuxt.js' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Vue+Nuxt.js] Vuex๋ฅผ ์ด์ฉํ์ฌ ์ฅ๋ฐ๊ตฌ๋ Page ๋ง๋ค๊ธฐ (0) | 2022.06.05 |
---|---|
[Vue+Nuxt.js] Nuxt.js๋ฅผ ์ด์ฉํ์ฌ ์ผํ ์ํ ๊ฒ์ UI ๊ฐ๋ฐ (0) | 2022.06.01 |
[Vue+Nuxt.js] Nuxt.js Data ํธ์ถ ๋ฐฉ์๊ณผ API ์ฐ๋ (0) | 2022.05.22 |
[Nuxt.js] ๋น๋๊ธฐ ๋ฐ์ดํฐ ํธ์ถ ๋ฐฉ๋ฒ (0) | 2022.05.22 |
[Vue+Nuxt.js] Nuxt.js ์์ํ๊ธฐ (0) | 2022.05.18 |