๐ Vue.js ๋ถ๋์ฐ ์ผํ๋ฌผ
1. ๊ฐ๋ฐํ๊ฒฝ ์ธํ ๊ณผ Vue3.js ์ต์ ๋ฒ์ ์ค์น
01. ๊ฐ๋ฐํ๊ฒฝ ์ค์น
Creating a Vue Application
npm init vue@latest
- ์ด ๋ช ๋ น์ด๋ก vue ํ๋ก์ ํธ๋ฅผ ์์ฑ ํ ์ ์์
- ์ดํ ์ ๋ ฅ์ผ๋ก ์ค์ ํ ์ ์์
โ Project name: โฆ <your-project-name>
โ Add TypeScript? โฆ No
โ Add JSX Support? โฆ No
โ Add Vue Router for Single Page Application development? โฆ No
โ Add Pinia for state management? โฆ No
โ Add Vitest for Unit testing? โฆ No
โ Add Cypress for both Unit and End-to-End testing? โฆ No
โ Add ESLint for code quality? โฆ No
โ Add Prettier for code formatting? โฆ No
Scaffolding project in ./<your-project-name>...
Done.
- ํ๋ก์ ํธ๋ก ๋ค์ด๊ฐ์
code .
๋ก vscode ์คํ
> cd <your-project-name>
> npm install
> npm run dev
- ๋ง์ฝ ๋น๋ ํ๊ณ ์ถ๋ค๋ฉด,
npm run build
๋ฅผ ์ฌ์ฉํ์ฌ ๋น๋ํจ - ๋น๋ํ๋ฉด html, css, js 3๊ฐ ํ์ผ์ด ๋์ด
02. ์์ฃผ ๋จ๋ ์ค๋ฅ
์ ๋ ์ค์น๊ฐ 10๋ถ์ด์ ๊ฑธ๋ ค์
- ์ธํฐ๋ท ๋๋ฆฌ๋ฉด ๊ทธ๋ ์ต๋๋ค. ์คํ๋ฒ ์ค์์ ํ์ง ๋ง๊ณ ์ง์์ ํ์๊ธธ ๋ฐ๋๋๋ค.
npm, yarn ๋ช ๋ น์ด ์ ๋ ฅํ์๋ง์ ์๋ฌ๊ฐ ๋ฉ๋๋ค
- ์ค์น๊ฐ ์ ๋๋ค๊ฐ ๊ฐ์๊ธฐ ์ค๊ฐ์ ๋นจ๊ฐ๊ฒ ๋จ๋ฉฐ ์๋ฌ๊ฐ ๋๋ ๋๋ถ๋ถ์ ๊ฒฝ์ฐ๋
- 99%ํ๋ฅ ๋ก nodejs๊ฐ ์ต์ ๋ฒ์ ์ด ์๋ ๊ฒฝ์ฐ ์ ๋๋ค.
- nodejs ์ญ์ ํ
- ๋ค๋ฅธ ๋ฒ์ ๋ค์ด๋ฐ์์ ๋ค์ ์๋ํด๋ณด์ญ์์ค
npm : command not found ์๋ฌ
- npm : command not found ๋ผ๋ ์๋ฌ๊ฐ ๋จ๋ ๊ฒ์ ์ญ์ 99%์ ํ๋ฅ ๋ก node ์ด์ํ๊ฒ ์ค์นํ์ ์ ์ ๋๋ค.
- nodejs ์ค์น์ ์ค์น๊ฒฝ๋ก ๋ง์ง์ง ๋ง์ญ์์ค.
- ๋งฅ๋ brew ์ด์ฉ๊ตฌ ๊ทธ๋ฐ๊ฑธ๋ก ์ค์นํ์ง ๋ง์๊ณ ๋ค์ด๋ฐ์ผ์ธ์.
- ๋ฆฌ๋ ์ค๋ nodejs ๋ฒ์ ์ ๊ทธ๋ ์ด๋ ์ปค๋งจ๋ ์ฐพ์์ ์ ๋ ฅํ์๋ฉด ๋๋ ์์์ ์ ํ์๋ฆฌ๋ผ ๋ฏฟ์ต๋๋ค.
๋งฅ์์ permission์ด ์์ด์, ๊ถํ์ด ์์ด์ ์ด๋ฐ ์๋ฌ๊ฐ ๋ฌ๋ค๋ฉด
- ์ง๊ด์ ์ธ ํด๊ฒฐ์ฑ ์ ๊ทธ๋ฅ npm์ด๋ yarn ์ฐ์ค ๋ ์์ sudo ๋ผ๋ ๋จ์ด๋ฅผ ๋ถ์ฌ์ฃผ์๋ฉด ๋ฉ๋๋ค.
sudo npm init vue@latest
์ด๋ฐ ์์ผ๋ก ํ๋ฉด ์ ๋ฉ๋๋ค- ์ค์น ์ค๊ฐ์ ์ฌ๋ฌ๋ถ ๋งฅ๋ถ ๋น๋ฒ์ ๋ ฅ์ด ํ์ํ ์ ์์ต๋๋ค.
- ๊ทผ๋ฐ sudo๋ ์์๋ฐฉํธ์ผ ๋ฟ์ ๋๋ค.
npm ERR! syscall access
npm ERR! Error: EACCES: permission denied, access '/usr/local/lib/node_modules'
- ์๋ฅผ ๋ค๋ฉด ์ด๋ฐ ์๋ฌ์ธ๋ฐ ํด๋ ์์ ๊ถํ์ด ์๋ค๊ณ ์๋ฌ๋ฅผ ๋์ฐ๋ ๊ฑฐ๋ฉด
- ์์ ๊ฒฝ์ฐ /usr/local/lib/node_modules ๋ผ๋ ํด๋์ ์์ ๊ถํ์ ์ฃผ์๋ฉด ๋ฉ๋๋ค.
- ํฐ๋ฏธ๋์ ์ผ์ ์ด๊ฑฐ ๋ ์ค์ ํ๋๋ฅผ ์ ๋ ฅํด๋ณด์ญ์์ค
sudo chown -R ๋๋งฅ๋ถ์ ์ ์ด๋ฆ: ์์์๋ฌ๋ฌ๊ฒฝ๋ก
sudo chown -R $USER ์์์๋ฌ๋ฌ๊ฒฝ๋ก
- ์๋ง ๋ ์ค ํ๋ ์ ๋ ฅํ์๋ฉด ๋๋ถ๋ถ ํด๊ฒฐ๋ ๊ฒ๋๋ค.
- ๋๋งฅ๋ถ์ ์ ์ด๋ฆ์ ํฐ๋ฏธ๋์ whoami ์ ๋ ฅํ์๋ฉด ๋์ต๋๋ค.
- ์ญ์ ์ด๊ฒ๋ ์์๋ฐฉํธ์ด๊ธด ํ๋ฐ
- ์ด๊ฑฐ ๋ง๊ณ ๋ ๋ค๋ฅธ ๊ฒฝ์ฐ๊ฐ ์์ ์ ์์ผ๋ ๊ทธ๋๋ก ๊ตฌ๊ธ์ ์๋ฌ๋ฉ์ธ์ง ๊ฒ์ํด๋ณด์๋ฉด ๋๊ฒ ์ต๋๋ค.
์๋์ฐ Powershell์์ ๋นจ๊ฐ๊ธ์จ๋ก โ๋ณด์์ค๋ฅโ๊ฐ ๋น๋๋ค.
- โํ๊ฐ๋์ง ์์ ์คํฌ๋ฆฝํธ ์ ๋๋ค ์ด์ฉ๊ตฌ~โ ๊ทธ๋ฐ ์๋ฌ๊ฐ ๋จ๋ฉด
- ์๋์ฐ ๊ฒ์๋ฉ๋ด (๋๋ณด๊ธฐ) - Powershell ๊ฒ์ - ์ฐํด๋ฆญ - ๊ด๋ฆฌ์ ๊ถํ์ผ๋ก ์คํํ ๋ค
Set-ExecutionPolicy Unrestricted
- ๋ผ๊ณ ๋์๋ฌธ์ ํ๋๋ผ๋ ํ๋ฆฌ์ง์๊ณ ์ ๋ ฅํ์ญ์์ค.
- ๊ทธ๋ผ ์ด์ npm์ผ๋ก ๋ญ ํ๋๊ฑฐ ์๋ฉ๋๋ค.
์๋์ฐ Powershell์ ์ด์ฉํ๋ ๊ฒฝ์ฐ๋ ๊ถํ์ด ์๋ค๊ณ ๋ญ๋ผ ๊ทธ๋ด ์ ์์ต๋๋ค.
- ๊ทธ๋ ๋ค๋ฉด ์๋์ฐ ๊ฒ์๋ฉ๋ด์์ powershell์ ๊ฒ์ ํ ์ฐํด๋ฆญ - ๊ด๋ฆฌ์ ๊ถํ์ผ๋ก ์คํํฉ๋๋ค.
- ๊ทธ ๋ค์์
npm init vue@latest
๋ฅผ ์ ๋ ฅํฉ๋๋ค. - ๊ทธ๋ผ ๋ฉ๋๋ค.
- ์ด ๊ฒฝ์ฐ vue create ์ด์ฉ๊ตฌ ํ ๋๋
- ์์ ํด๋๋ฅผ ์คํํ ๋ค์ ์๋จ ๋ฉ๋ด์์ ํ์ผ - powershell์ด๊ธฐ - ๊ด๋ฆฌ์ ๊ถํ์ผ๋ก powershell ์ด๊ธฐ ๋๋ฅด์ ํ ์ ๋ ฅํด๋ณด์ญ์์ค.
2. HTML์ ๋ฐ์ดํฐ ๊ฝ์๋ฃ๋ Vue ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ ๋ฌธ๋ฒ
00. ์ค๋์ 5๋ถ ์์
- ์ผ๋จ ์ด๋ ๊ฒ ์๊ธด ๋ฐ์ดํฐ๋ฅผ ํ๋จ์ ํ๋ ์ ์ฅํจ
products: ["์ญ์ผ๋์๋ฃธ", "์ฒํธ๋์๋ฃธ", "๋งํฌ๊ตฌ์๋ฃธ"];
- ๊ทธ ๋ฐ์ดํฐ์
{{๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ}}
๋ฌธ๋ฒ์ผ๋ก ๋์ถฉ ์ด๋ ๊ฒ ์๊ธด HTML ๋ ์ด์์์ ๋ง๋ค์ด๋ณด์ - ๊ฐ๊ฒฉ์ ๋์ถฉ ์์๋ก ์๋ฌด๊ฑฐ๋ ๊ธฐ์ ํ๋ฉด๋จ
01. ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ
HTML์ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฐ์ดํฐ๋ฅผ ๊ฝ์๋ฃ๊ณ ์ถ์ ๋๊ฐ ์์ต๋๋ค.
๋ฐ์ดํฐ๋ฐ์ธ๋ฉ์ด๋ผ๊ณ ํ๋๋ฐ
Vue์์ ๋ฐ์ดํฐ๋ฐ์ธ๋ฉ ํ๋ ๋ฌธ๋ฒ์ 2๊ฐ ์์๋ณด๋๋ก ํฉ์๋ค.
๊ทผ๋ฐ ์ ์ด์ ๋ฐ์ดํฐ๋ฐ์ธ๋ฉ์ ์ ํ๋์ง ์๋ฌธ์ ๋ถํฐ ๋ค์ง ์์ต๋๊น.
๊ทธ๋ฐ๊ฑฐ ๊ถ๊ธํดํด์ผ ๋์ค์ ์ฌ๋ฌ๋ถ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ ํ ์ง ๋ง์ง ์ค์ค๋ก ํ๋จํ๋ ํ๋ฅญํ ์ฌ๋์ด ๋ฉ๋๋ค.
๊ทธ๊ฒ ๋ถํฐ ์์๋ด ์๋ค.
02. Vue ๊ฐ๋ฐ์ ์ด๋ ค์ด๊ฒ ์๋
์ด๋๊ฐ๋ ์ด์ํ ๋ฌธ๋ฒ๋ถํฐ ๊ฐ๋ฅด์น๋๊น ํผ์ ์ฝ๋์ง๋๊ฑฐ ์ด๋ ค์๋ค ํ์๋๋ฐ
๊ทธ๋ฅ ํ์์ HTML CSS๋ก ์นํ์ด์ง ๊ฐ๋ฐํ๋ ๋๋ก ์ญ ์ฝ๋์ง์๋ฉด ๋๊ณ
ํ์ํ ์๊ฐ์๊ฐ Vue ๋ฌธ๋ฒ์ ์ฒจ๊ฐํ๋ฉด ๋ฉ๋๋ค.
๊ทธ๋์ ์๋ฃธํ๋ ์ผํ๋ชฐ์ ํ๋ฒ ๋ง๋ค์ด๋ด ์๋ค. ์ผ๋จ ๋ ์ด์์ ๋ถํฐ์.
<template>
<div>
<h4>XX ์๋ฃธ</h4>
<p>XX ๋ง์</p>
</div>
<div>
<h4>XX ์๋ฃธ</h4>
<p>XX ๋ง์</p>
</div>
</template>
HTML ์ฝ๋๋ค์ <template>
์์ ์ง์ด๋ฃ์ผ๋ฉด ๋ฉ๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ ๊ธฐ๋ฅ์ <script>
์คํ์ผ์ <style>
์์ ๋ฃ์ผ์ญ์์ค.
๊ทธ๋์ ์๋ฌดํผ ์ ๋ฐ HTML์ ์ถ๊ฐํ์ญ์์ค. ๋ฐฐ์ธ ๋ฌธ๋ฒ์ด ํ๋ ์์ด์ ๊ทธ๋ ์ต๋๋ค.
03. Vue์ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ ๋ฌธ๋ฒ
JavaScript๋ก ์์ฃผ ํ๋ ์ง๊ฑฐ๋ฆฌ๊ฐ ์์ต๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ ๋ณ์๋ ๋ฐ์ดํฐ๋ฅผ HTML์ ๊ฝ์๋ฃ๋ ๋ฐ์ดํฐ๋ฐ์ธ๋ฉ์ ๋๋ค.
์ ํต๋ฐฉ์์ ์ด๋ ๊ฒ ๊ธธ๊ฒ ํ์ค ์จ์ผ ๋ฐ์ดํฐ๋ฐ์ธ๋ฉ์ด ๊ฐ๋ฅํ์ต๋๋ค.
document.getElementById(์ด์ฉ๊ตฌ).innerHTML = ๋ฐ์ดํฐ;
๊ทผ๋ฐ Vue๋ ๊ทธ๋ด ํ์์์ด
-
์ผ๋จ ๋ฐ์ดํฐ๋ณด๊ด๋ถํฐ ์ด๋๊ฐ์ ํ์๊ณ
-
๊ทธ๊ฑธ
{{๋ฐ์ดํฐ}}
์ด๋ฐ ๋ฌธ๋ฒ์ผ๋ก HTML ์ค๊ฐ์ค๊ฐ์ ์ฝ๊ฒ ๊ฝ์๋ฃ์ ์ ์์ต๋๋ค.
data๋ณด๊ดํจ์ ์ฌ๊ธฐ์์ต๋๋ค.
<script>
export default {
name: "App",
data() {
return {
price1: 60,
};
},
};
</script>
script ํ๊ทธ ์์ data(){ return { } }
์ด๊ฑธ ์ด๊ณ
๋ฐ์ดํฐ๋ฅผ object ํ์์ผ๋ก ์ ์ฅํ์๋ฉด ๋ฉ๋๋ค.
์ด๊ฒ Vue์ data๋ณด๊ดํจ, ๋ณ์๋ณด๊ดํจ์ด๋ผ๊ณ ๋ณด์๋ฉด ๋๊ฒ ์ต๋๋ค.
์ค์ํ ๋ฐ์ดํฐ๋ ๋ค ์ฌ๊ธฐ ๋ณด๊ดํ์ญ์์ค. ์ค๊ดํธ๋๊น object ํ์์ ๋ง์ถฐ์์.
๊ทธ๋ผ ์ด์ price1 ์ด๋ผ๋ ๋ฐ์ดํฐ๋ฅผ HTML์์ ๊ฝ์๋ฃ์ด์ ์ ์ ์๊ฒ ๋ณด์ฌ์ฃผ๊ณ ์ถ์ผ๋ฉด
{{ price1 }}
์ด๊ฒ๋ง ์ฐ๋ฉด ๋ฉ๋๋ค.
<p>{{ price1 }} ๋ง์</p>
์ ์ฅํ๋ฉด ๋ธ๋ผ์ฐ์ ์ 60๋ง์์ด๋ผ๊ณ ์ ๋น๋๋ค.
Q. ๋ญ์ ๊ทธ๋ฅ ์ ์ด์ <p>60๋ง์</p>
์ด๋ ๊ฒ ํ๋์ฝ๋ฉํ๋ฉด ๋๋๋ฐ ๊ตณ์ด ๋ฐ์ดํฐ๋ก ์ ์ฅํด๋๋ค๊ฐ ์ ๋ฐ์ดํฐ๋ฐ์ธ๋ฉํจ?
์ด์ 1. ์ผํ๋ชฐ์ ๊ฐ๊ฒฉ์ด ๋งจ๋ ๋ณ๋๋์ง์์ต๋๊น.
๊ทธ๊ฑธ ๋ฐ์ดํฐ๋ก ์ ์ฅํด๋์ผ๋ฉด ์์ ์ด ๋์ค์ ํธ๋ฆฌํฉ๋๋ค.
JS๋ก ์กฐ์์ด ์ฝ๊ฑฐ๋ ์
์ด์ 2. Vue์ ์ค์๊ฐ ๋ ๋๋ง๊ธฐ๋ฅ ์ฐ๋ ค๋ฉด ๋ฐ์ดํฐ๋ฐ์ธ๋ฉ ํด๋์ผ์ญ์์ค
Vue๋ ์ ๊ธฐํด์ data๊ฐ ๋ณ๊ฒฝ๋๋ฉด data์ ๊ด๋ จ๋ HTML์ ์ค์๊ฐ์ผ๋ก ๋ฐ์๋ฉ๋๋ค.
๋ง์ฝ์ ์ฌ๋ฌ๋ถ์ด price1์ 60์์ 70์ผ๋ก ์กฐ์ ํ๋ฉด
{{ price1 }}
์๋ ๊ทธ ๋ณ๊ฒฝ์ฌํญ์ด ๋ฐ๋ก ์ ์ฉ๋๋ค๋ ์๋ฆฌ์
๋๋ค.
๋ฐ๋ก ์ฝ๋์งค ํ์ ์์ด ์๋์ผ๋ก ์ฅ ๋ฐ๋๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ด๋ฐ ์ฌ์ดํธ๋ฅผ ์ฐ๋ฆฌ๋ ์น์ฑ์ด๋ผ๊ณ ๋ถ๋ฆ ๋๋ค.
๊ทธ๋์ ์น์ฑ ๋ง๋ค๊ณ ์ถ์ผ๋ฉด ์ข์ ๋งํ ๋ ์์ฃผ ๋ฐ๋ ๋ฏํ ๋ฐ์ดํฐ๋ค์ data๋์ ์ง์ด๋ฃ๊ณ
๋ฐ์ดํฐ๋ฐ์ธ๋ฉํด์ ๋ณด์ฌ์ฃผ์๊ธธ ๋ฐ๋๋๋ค.
04. HTML ์์ฑ๋ ๋ฐ์ดํฐ๋ฐ์ธ๋ฉ์ด ๊ฐ๋ฅ
๊ทธ๋๊น style=โโ id=โโ class=โโ ์ด๋ฐ ๊ฒ๋ค์๋
๋ฐ์ ์ ์ฅํด๋ data๋ฅผ ๊ฝ์๋ฃ์ ์ ์๋ค๋ ๊ฒ์ ๋๋ค.
<template>
<div>
<h4 :style="์คํ์ผ">XX ์๋ฃธ</h4>
<p>XX ๋ง์</p>
</div>
<div>
<h4>XX ์๋ฃธ</h4>
<p>XX ๋ง์</p>
</div>
</template>
<script>
export default {
name: "App",
data() {
return {
price1: 60,
์คํ์ผ: "color:red",
};
},
};
</script>
์ด๋ ๊ฒ ์ง์๋ฉด color : red
๋ผ๋ ๋ฐ์ดํฐ๋ ์ํ๋ ๊ณณ์ ๊ฝ์๋ฃ์ ์ ์์ต๋๋ค.
์์ํ๋ ๋ชจ๋ ์์ฑ์ ๋ฐ์ดํฐ ๊ฝ์๋ฃ๊ธฐ๊ฐ ๊ฐ๋ฅํฉ๋๋ค.
3. ๋ฆฌ์กํธ๋ณด๋ค 100๋ฐฐ ์ฌ์ด Vue ๋ฐ๋ณต๋ฌธ v-for
00. ์ค๋์ 5๋ถ ์์
-
v-for ๋ฌธ๋ฒ์ ์ด์ฉํด ์ง๊ธ ์๋ ์ํ๋ชฉ๋ก์ ๋ฐ๋ณต๋ฌธ์ผ๋ก ์ถ์ฝํด๋ณด์ญ์์ค.
-
๊ฐ๊ฒฉ์ ์ ๊ฒฝ์ฐ์ง๋ง๊ณ ์ํ์ ๋ชฉ๋ง ์ ๋ณด์ด๋ฉด ๋ฉ๋๋ค.
์ ๋ฒ์๊ฐ ์์
์ ๋ฒ ์๊ฐ์ ํ๋จ์ ๋ฐ์ดํฐ๋ก ```js products: ["์ญ์ผ๋์๋ฃธ", "์ฒํธ๋์๋ฃธ", "๋งํฌ๊ตฌ์๋ฃธ"]; ``` ์ด๋ ๊ฒ 3๊ฐ์ ์ํ๋ช ์ ์ ์ฅํ๋ผ๊ณ ํ์ต๋๋ค. ๊ทธ ๋ค์ 3๊ฐ์ ์ํ๋ช ์ ์ ๊ธฐ HTML์๋ค๊ฐ ๋ฐ์ดํฐ๋ฐ์ธ๋ฉํ๋ผ๊ณ ํ์ต๋๋ค. ๊ณ ๋ฏผํ ๊ฒ ์์ด ์ค๊ดํธ ๋ฌธ๋ฒ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๊ฝ์๋ฃ์ผ๋ฉด ๋ฉ๋๋ค. ```html{{products[0]}}
50๋ง์
{{products[1]}}
50๋ง์
{{products[2]}}
50๋ง์
HTML์ ์ง๋ค๋ณด๋ฉด ๋น์ทํ <div>
์ด๋ฐ๊ฒ ์๋ฐฑ๋ฒ ์ถ๋ชฐํ์ง ์์ต๋๊น.
๊ทธ๊ฑธ ๋ณด๊ณ ์์ผ๋ฉด ๋น์ทํ <div>
๋ค์ ๊ฐ๋จํ๊ฒ for ๋ฐ๋ณต๋ฌธ ๊ฐ์ ๊ฑธ๋ก ์ถ์ฝํ๊ณ ์ถ์ ์ถฉ๋์ด ๋ค์ง ์์ต๋๊น.
๋ฆฌ์กํธ๋ Vue๋ฅผ ์ฐ๋ฉด ๊ฐ๋ฅํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ๋ฐ ์ฅ์ ๋๋ฌธ์ ๋ฆฌ์กํธ์ Vue๋ฅผ ์ฐ๋๊ฒ๋๋ค.
ํ์ง๋ง for, map, forEach ์ด๋ฐ ๋ฌธ๋ฒ ๋ฐฐ์ฐ๋ค ํฌ๊ธฐํ์ จ๋ค๋ฉด
Vue ๋ฐ๋ณต๋ฌธ์ 100๋ฐฐ ์ฌ์ฐ๋ ๊ฑฑ์ ํ์ง ๋ง์๋ค.
01. ์๋จ ๋ฉ๋ด ๋ง๋ค๊ธฐ
ํ์ด์ง๊ฐ ์ฌ๋ฌ๊ฐ ์๋ ๊ฒ์ ์๋์ง๋ง ์ฌ์ฌํ๋ ์๋จ๋ฉ๋ด๋ฅผ ๋ง๋ค์ด๋ด ์๋ค.
HTML๊ณผ CSS๋ ๋ค์๊ณผ ๊ฐ์ด ์์ฑํฉ๋๋ค.
CSS๋ vueํ์ผ ํ๋จ <style>
ํ๊ทธ ์์ ๋ฃ์ผ๋ฉด ๋ฉ๋๋ค.
<div class="menu">
<a>Home</a>
<a>Products</a>
<a>About</a>
</div>
.menu {
background: darkslateblue;
padding: 15px;
border-radius: 5px;
}
.menu a {
color: white;
padding: 10px;
}
02. v-for HTML ๋ฐ๋ณต๋ฌธ
๊ฐ๋ ์ฝ๋๋ฅผ ์ง๋ค๊ฐ
HTML์ ๋ฐ๋ณต๋๋ ๋ถ๋ถ์ด ๋ณด์ด๋ฉด ์ถ์ฝํ๊ณ ์ถ์ ์ถฉ๋์ด ๋ญ๋๋ค.
์ด๊ฑธ ์ถ์ฝํ๊ณ ์ถ์ผ๋ฉด v-for์ ์ฐ๋ฉด ๋ฉ๋๋ค.
v-for์ฐ์๋ฉด ์ํ๋ ๋งํผ HTML ํ๊ทธ๋ฅผ ๋ณต๋ถํ ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด์ ์์์ ์์ฑํ๋ <a>
ํ๊ทธ 3๊ฐ๋ฅผ
ํ์ค ์ปท์ผ๋ก ์์ฑํ๋ ๋ง๋ฒ์ ๋ณด์ฌ๋๋ฆฌ๊ฒ ์ต๋๋ค.
<div class="menu">
<a v-for="์๋ช
in 3" :key="์๋ช
">Home</a>
</div>
-
์ํ๋ ํ๊ทธ์
v-for="์๋ช in ๋ฐ๋ณตํ ํ์"
๋ฅผ ์ ์ต๋๋ค. -
๊ทธ๋ฆฌ๊ณ ์ผ์ค์๊ฒ
:key="์๋ช "
์ด๊ฒ๋ ์ถ๊ฐํด์ค๋๋ค.
๊ทธ๋ผ ์ด HTML ํ๊ทธ๋ ๋ด๊ฐ ์ํ๋ ๋งํผ ๋ฐ๋ณต์์ฑ๋ฉ๋๋ค.
์์ ์์ ๋ Home์ด๋ผ๋ aํ๊ทธ๊ฐ 3๊ฐ๋ ์์ฑ๋๊ฒ ๋ค์.
์๋ช ์ ์๋ฌด๋ ๊ฒ๋ ํ์๋ฉด ๋ฉ๋๋ค. ๋ณ์ํ๋ ์๋ช ํ๋ ๊ฒ๋๋ค.
:key
์์ฑ์ ๋ฐ๋ณต๋ฌธ๋๋ฆด ๋ ๊ผญ ํ์ํฉ๋๋ค. ๋ฐ๋ณตํ ์์๋ค์ ๊ฐ๊ฐ ๊ตฌ๋ถ์ง๊ธฐ ์ํ ์์ฑ์
๋๋ค.
03. v-for HTML ๋ฐ๋ณต๋ฌธ 2
v-for ๋ฐ๋ณต๋ฌธ์ ์ฌ์ฉํ ๋ array, object ๋ฐ์ดํฐ๋ฅผ ์ง์ด๋ฃ์ ์๋ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด์ array ์๋ฃ๋ฅผ ํ๋ ๋ง๋ค์ด๋ด ์๋ค. ๋ฐ์ดํฐ๋ก ์ ์ฅํด๋์ญ์์ค.
data(){
return {
๋ฉ๋ด๋ค : ['Home', 'Shop', 'About']
}
}
๊ทธ๋ผ ์ด์ ๋ฉ๋ด๋ค ์ด๋ผ๋ ๋ฐ์ดํฐ๋ก ๋ฐ๋ณต๋ฌธ์ ๋๋ฆด ์๋ ์๋ค๋ ๊ฒ๋๋ค.
<div class="menu">
<a v-for="์๋ช
in ๋ฉ๋ด๋ค" :key="์๋ช
">Home</a>
</div>
์๊น๋ ์ฌ์ฉํ๋ ๋ฒ์ ๋๊ฐ์๋ฐ ๋ฐ๋ณต์ํฌ ํ์ ์ ๋ ๋์๋ค๊ฐ array ์๋ฃ๋ฅผ ์ง์ด๋ฃ์ ์ ์์ต๋๋ค.
์ด ๊ฒฝ์ฐ
1. ๋ฉ๋ด๋ค์์ ์๋ฃ ๊ฐฏ์๋งํผ ๋ฐ๋ณต๋ฉ๋๋ค.
2. ์๋ช ํ ๋ณ์๋ ๋ฐ๋ณต๋ ๋๋ง๋ค ๋ฉ๋ด๋ค ์์ ์๋ ์๋ฃ๋ค์ด ๋ฉ๋๋ค.
์๋ฅผ ๋ค์ด์ ์๋ช ํ ๋ณ์๋ ์ถ๋ ฅํด๋ณด๋ฉด 1ํ ๋ฐ๋ณต์์ โHomeโ 2ํ ๋ฐ๋ณต์์ โShopโ ์ด๋ ๊ฒ ๋ณํ๋ค๋ ๊ฒ๋๋ค.
<div class="menu">
<a v-for="์๋ช
in ๋ฉ๋ด๋ค" :key="์๋ช
"> {{ ์๋ช
}}</a>
</div>
๊ทธ๋์ ์๋ช
ํ ๋ณ์๋ฅผ ์ ๊ธฐ ์ค์ ๋ก ์ถ๋ ฅํด๋ณด๋ฉด (๋ฐ์ดํฐ๋ฐ์ธ๋ฉํด๋ณด๋ฉด)
์ง์ง ๊ทธ๋ ์ฃ ?
<a>
ํ๊ทธ๊ฐ 3๋ฒ ์์ฑ๋๋๋ฐ ์์ฑ๋ ๋๋ง๋ค {{์๋ช
}}
๋ถ๋ถ์ ์ฐจ๋ก๋ก
Home์ด ๋๊ณ Shop์ด ๋๊ณ About์ด ๋ฉ๋๋ค.
๊ทธ๋์ ๋ฐ์ ์๋ array, object ๋ฐ์ดํฐ ์์ ์๋ ์๋ฃ๋ค์
ํ๋์ฉ HTML๋ก ๋ง๋ค์ด์ ๋ณด์ฌ์ฃผ๊ณ ์ถ์ ๋๋ v-for์ ์ฐ์๋ฉด ์ ์ฉํฉ๋๋ค.
04. v-for ์์ ๋ณ์๋ 2๊ฐ๊น์ง ์๋ช ๊ฐ๋ฅ
<div class="menu">
<a v-for="(์๋ช
,i) in ๋ฉ๋ด๋ค" :key="i"> {{ ์๋ช
}}</a>
</div>
()
์๊ดํธ๋ฅผ ์ฌ์๋ฉด ์๋ช
์ ๋๊ฐ๊น์ง ํ์ฉํด์ค๋๋ค.
์ฒซ์งธ ์๋ช ํ๊ฑด ์๊น ์ค๋ช ํ๋ array์์ ๋ฐ์ดํฐ๊ฐ ๋๋ ๊ฒ์ด๊ณ
๋์งธ ์๋ช
ํ๊ฑด 0, 1, 2 ..
์ด๋ฐ ์์ผ๋ก 1์ฉ ์ฆ๊ฐํ๋ ์ ์๊ฐ ๋ฉ๋๋ค.
๋ฐ๋ณต ํ์๋ฅผ ์๋ ค์ฃผ๋ ์ซ์๋ผ๊ณ ๋ณด์๋ฉด ๋๊ฒ ์ต๋๋ค.
๊ทธ๋์ i๋ ์ถ๋ ฅํด๋ณด์๋ฉด ๋ฐ๋ณต๋ ๋๋ง๋ค 0, 1, 2..
์ด๋ ๊ฒ ๋ณํ ๊ฑธ์
๊ทธ๋ฆฌ๊ณ ์ด๊ฑธ ๋ณดํต ๊ด์ต์ ์ผ๋ก :key
์์ ์ง์ด๋ฃ์ต๋๋ค.
๊ทธ๋์ ๊ฒฐ๋ก ์ HTML ๋ณต๋ถํ๊ธฐ ํ๋ค๋ฉด ์ฐ์๊ธธ ๋ฐ๋๋๋ค.
์๋๋ฉด ํน์ HTML์ ๋ฐ์ดํฐ ๊ฐฏ์๋งํผ ์๋์ผ๋ก ์์ฑํ๊ณ ์ถ์ผ๋ฉด ์ฐ์ญ์์ค.
04. Vue ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ก click ๊ฐ์งํ๊ธฐ (ํ์๋งค๋ฌผ ์ ๊ณ ๋ฒํผ ๋ง๋ค๊ธฐ)
00. ์ค๋์ 5๋ถ ์์
๋ชจ๋ ์ํ์ ์ ๊ณ ๋ฒํผ๊ณผ ๊ธฐ๋ฅ์ ๋ง๋ค์ด์ค์ญ์์ค.
์ํ๋ง๋ค ๊ฐ๊ฐ ์ ๊ณ ์๋ฅผ ๋ฐ๋ก ์ง๊ณํด์ผํฉ๋๋ค. ๊ทธ๋์ ์ ๊ณ ์ 3๊ฐ๋ฅผ ๊ฐ๊ฐ ์ ์ฅํ ๊ณต๊ฐ์ด ๋ฏธ๋ฆฌ ํ์ํ๊ฒ ๊ตฐ์.
์ ๋ฒ์๊ฐ ์์
`{{products[i]}}
50๋ง์
์ด๋ค HTML ์์๋ฅผ ํด๋ฆญํ์ ๋ ๋ญ๊ฐ ์ผ์ด ์ผ์ด๋๊ฒ ๋ง๋ค๊ณ ์ถ์ผ๋ฉด
<div onclick="">
์ด ์์ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ง์ด๋ฃ์ต๋๋ค.
Vue์์๋ ์ด์ง ๋ค๋ฅด๊ฒ ์ง์ด๋ฃ์ผ๋ฉด ๋ฉ๋๋ค. @click=""
์ด๊ฑธ ์ง์ด๋ฃ์ผ๋ฉด ๋ฉ๋๋ค.
๋ฌธ๋ฒ๋ง ์ค๋ช ํ๋ฉด ๋ค์๋ ๋ค ๊น๋จน์๊ฒ ๋ถ๋ช ํ๋
์ ๋ฒ์๊ฐ๊น์ง ๋ง๋ค๋ ๋ถ๋์ฐ ์ฌ์ดํธ์ ํ์๋งค๋ฌผ ์ ๊ณ ๋ฒํผ๊ณผ ๊ธฐ๋ฅ์ ๋ง๋ค์ด๋ณด๋ฉฐ ๋ฐฐ์๋ด ์๋ค.
01. ํ์๋งค๋ฌผ ์ ๊ณ ๋ฒํผ๊ณผ ์ ๊ณ ์ ๋ง๋ค๊ธฐ
์ผ๋จ ์ ๋ฒ์๊ฐ ๋ฐ๋ณต๋ฌธ ๋๋ฆฐ๊ฑด ๋ณต์กํด๋ณด์ด๋๊น ๋ค์ ์๋๋๋ก ๋ณต๊ตฌ์ํต๋๋ค.
<div>
<h4>{{products[0]}}</h4>
<p>50๋ง์</p>
</div>
<div>
<h4>{{products[1]}}</h4>
<p>50๋ง์</p>
</div>
<div>
<h4>{{products[2]}}</h4>
<p>50๋ง์</p>
</div>
์ฐ๋ฆฌ๊ฐ์ ๋นก๋๊ฐ๋ฆฌ๋ค์ ๊ฐ๋จํ๊ฑธ ์ข์ํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
์ฌ๊ธฐ๋ค๊ฐ ๋ฒํผ์ ํ๋ ์ถ๊ฐํด๋ณด์๋๊ฒ๋๋ค.
<div>
<h4>{{products[0]}}</h4>
<p>50๋ง์</p>
<button>ํ์๋งค๋ฌผ์ ๊ณ </button>
<span>์ ๊ณ ์ : 0</span>
</div>
์ด๊ฑฐ ๋ฒํผ์ ๋๋ฅด๋ฉด ์์ ์๋ ์ ๊ณ ์๊ฐ 1 ์ฆ๊ฐํ๋ ๊ธฐ๋ฅ์ ๋ง๋ค์ด๋ณผ๊ฒ๋๋ค.
๊ทธ๋ฌ๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผํ ์ง ์๊ฐํด๋ด ์๋ค.
์ผ๋จ ์ ๊ณ ์๋ฅผ ๊ธฐ๋กํ ์ ์๋ ๋ณ์๋ ๋ฐ์ดํฐ๊ฐ ํ๋ ํ์ํ์ง ์์๊น์?
data(){
return {
์ ๊ณ ์ : 0,
}
}
<div>
<h4>{{products[0]}}</h4>
<p>50๋ง์</p>
<button>ํ์๋งค๋ฌผ์ ๊ณ </button>
<span>์ ๊ณ ์ : {์ ๊ณ ์}</span>
</div>
1. ๊ทธ๋์ ํ๋จ์ ๋ฐ์ดํฐ๋ฅผ ํ๋ ๋ง๋ค๊ณ 2. ๋ฐ์ดํฐ๋ฅผ HTML๋์ ๊ฝ์๋ฃ์์ต๋๋ค.
์ด์ ๋ฒํผ์ ๋๋ฅด๋ฉด ์ ๊ณ ์๋ผ๋ ๋ฐ์ดํฐ๋ฅผ 1์ฆ๊ฐ์ํค๋ฉด ์ ๊ณ ์๊ฐ 1์ด ๋๊ณ HTML๋ ์ฌ๋ ๋๋ง์ด ๋๊ณ
์ํ๋ ๊ธฐ๋ฅ์ด ์์ฑ๋ ๊ฒ ๊ฐ์ต๋๋ค.
02 . ๋ฒํผ์ ๋๋ฅด๋ฉด ๊ธฐ๋ฅ์ ์คํํ๊ณ ์ถ์ ๊ฒฝ์ฐ
์๋ฐ์คํฌ๋ฆฝํธ๋ onclick=โโ ์ด๋ผ๋ ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ฅผ HTMLํ๊ทธ์ ๋ฌ์์ง๋ง
Vue์์๋ @click=""
์ด๋ผ๊ณ ์ฌ์ฉํฉ๋๋ค.
๊ทธ๋ผ ์์๋ค๊ฐ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์์ ๋กญ๊ฒ ์ ๋ ฅ๊ฐ๋ฅํฉ๋๋ค.
<div>
<h4>{{products[0]}}</h4>
<p>50๋ง์</p>
<button @click="์ ๊ณ ์++">ํ์๋งค๋ฌผ์ ๊ณ </button>
<span>์ ๊ณ ์ : {{์ ๊ณ ์}}</span>
</div>
์ด๊ฑฐ ๋ฒํผ์ ๋๋ฅด๋ฉด ์ ๊ณ ์๋ผ๋ ๋ฐ์ดํฐ๋ฅผ +1
ํด์ฃผ๊ณ ์ถ์ด์ ์ ๋ ๊ฒ ์์ฑํ์ต๋๋ค.
๊ทธ๋ผ ๋ฒํผ ๋๋ฅผ ๋๋ง๋ค ์ ๊ณ ์๊ฐ +1
๋ฉ๋๋ค. ๋!
์ ๊ณ ์++
์ ๊ณ ์+=1
์๋ฌด๋ ๊ฒ๋ ์์ฑํ ์ ์์ต๋๋ค.
@click
๋ง๊ณ ๋ค๋ฅธ ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ ๋ง๋ค ์ ์์ต๋๋ค.
@mouseover
ํ๋ฉด ํด๋ฆญ์ด ์๋๋ผ ๋ง์ฐ์ค๋ง ๋์ ๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์คํ๊ฐ๋ฅํ๊ณ
@input
ํ๋ฉด ์ธํ์ ๊ฐ์ ์
๋ ฅํ์ ๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์คํ๊ฐ๋ฅํ๊ณ
๋๋ค์ด ์๋ ์ด๋ฒคํธ๋ช
์ ์์ ๋กญ๊ฒ ๊ธฐ์
ํด์ฃผ๋ฉด ๋ฉ๋๋ค. ๋ชจ๋ฅด๋ฉด ์ด์ฉ ์ ์์ด @click
์ด๋ ์์๋ค.
03. ์ฝ๋๊ฐ ๊ธธ ๊ฒฝ์ฐ ํจ์๋ฅผ ๋ง๋ค์ด์๋๋ค
๊ธด ์ฝ๋๋ฅผ ์งง๊ฒ ์ถ์ฝํด์ฃผ๋๊ฒ ๋ฐ๋ก ํจ์๋ฌธ๋ฒ์ ๋๋ค.
๊ทธ๋์ @click
์์ ๋ค์ด๊ฐ ๋ง์ด ๋๋ฌด ๊ธธ๋ค๋ฉด ํจ์๋ฅผ ๋ง๋ค์ด์ ์ง์ด๋ฃ์ผ์ญ์์ค.
ํจ์ ๋ง๋๋ ์๋ฆฌ๋ ์ด๋ฏธ ์ ํด์ ธ์์ต๋๋ค. ๋ฐ์์ methods : {}
๋ผ๋ ํญ๋ชฉ์ ์ ์คํด์ฃผ๋ฉด ๋ฉ๋๋ค.
data(){
return {
์ ๊ณ ์ : 0,
},
}
methods : {
increase(){
this.์ ๊ณ ์ += 1
}
}
methods
๋ผ๋ ํญ๋ชฉ์ ๋ง๋์ ํ
ํจ์๋ฅผ ์์๋ค๊ฐ ๊ณ์ ๋ง๋ค์ด๋ผ ์ ์์ต๋๋ค. ํจ์๋ง๋ค ๋ ํจ์์ด๋ฆ(){}
์ด๊ฒ ๋์
๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ด๊ฑด ๊ผญ ๊ธฐ์ตํด์ผํ๋ ๋ถ๋ถ์ธ๋ฐ
์ฌ๊ธฐ์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ๋ค์ฐ๊ณ ์ถ์ผ๋ฉด ๊ผญ this.๋ฐ์ดํฐ์ด๋ฆ
์ด๋ผ๊ณ ์ฌ์ฉํด์ผํฉ๋๋ค.
this
๋ ๊ทธ๋ฅ ์์ ์๋ ๋ฐ์ดํฐ์ ํจ์๋ฅผ ๋ด์ ํฐ object๋ผ๊ณ ์๊ฐํ์๋ฉด ๋๊ฒ ์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ์๊น HTML ๋ถ๋ถ์์ ํจ์๋ฅผ ์์ ๋กญ๊ฒ ์ฌ์ฉํ๋ฉด
์๊น ์ถ์ฝํ๋ this.์ ๊ณ ์+=1
์ด๊ฒ ์คํ๋ฉ๋๋ค. ๋
<div>
<h4>{{products[0]}}</h4>
<p>50๋ง์</p>
<button @click="increase()">ํ์๋งค๋ฌผ์ ๊ณ </button>
<span>์ ๊ณ ์ : {{์ ๊ณ ์}}</span>
</div>
ํจ์()
์ด๋ ๊ฒ ํ์
๋ ๋๊ณ
ํจ์์ด๋ฆ๋ง ์ฐ์
๋ ๋ฉ๋๋ค. @click="increase"
์ด๋ ๊ฒ์.
ํจ์๋ ํ๊ธ๋ก ์๋ช ํ๋ฉด ์ ์๋ ์ ์์ต๋๋ค.
05. v-if ์ ๋ชจ๋ฌ์ฐฝ ๋ง๋ค๊ธฐ (Vue์์ ๋์ ์ธ UI ๋ง๋๋ ๋ฒ)
00. ์ค๋์ 5๋ถ ์์
๋ชจ๋ฌ์ฐฝ ๋ซ๊ธฐ๋ฒํผ๊ณผ ๊ธฐ๋ฅ์ ๋ง๋ค์ด์ค์ญ์์ค.
์ ๋ฒ์๊ฐ ์์
```html ์ ๊ณ ์ : 0 ์ ๊ณ ์ : 0 ์ ๊ณ ์ : 0 ``` ๋ฒํผ๊ณผ ์ ๊ณ ์ํ์๋ฅผ 3๊ฐ ๋ง๋ค์ด๋๋ฉด ๋ฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ฌ๊ธฐ ๊ธฐ๋ฅ์ ๊ฐ๋ฐํ๋ฉด ๋๊ฒ ์ต๋๋ค. ๊ฐ๊ฐ ์ ๊ณ ์๋ ๋ค๋ฅด๊ฒ ๋์ํด์ผํฉ๋๋ค. ๊ทธ๋์ ์ ๋ ์ผ๋จ ๋ฐ์ดํฐ๋ฅผ ์ด๋ ๊ฒ ๋ง๋ค์ด๋จ์ต๋๋ค. ```js data(){ return { ์ ๊ณ ์ : [0,0,0] } } ``` ์๋๋ฉด ์ํ์ด 3๊ฐ์ธ๋ฐ ๊ทธ๋ผ ๊ฐ๊ฐ ์ ๊ณ ์๋ฅผ ๊ธฐ๋กํ ๊ณต๊ฐ๋ 3๊ฐ ์์ด์ผํ์ง ์๊ฒ ์ต๋๊น. array ์๋ฃ๋ฅผ ์ฌ์ฉํ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ 0๋ฒ์งธ ์ํ์๋ `์ ๊ณ ์[0]`์ ํ๊ธฐํด์ฃผ๊ณ 0๋ฒ์งธ ์ ๊ณ ๋ฒํผ์ ๋๋ฅด๋ฉด `์ ๊ณ ์[0]++` 1๋ฒ์งธ ์ํ์๋ `์ ๊ณ ์[1]`์ ํ๊ธฐํด์ฃผ๊ณ 1๋ฒ์งธ ์ ๊ณ ๋ฒํผ์ ๋๋ฅด๋ฉด `์ ๊ณ ์[1]++` ... ๋ฅผ ํด์ฃผ๋ฉด ๊ธฐ๋ฅ๊ฐ๋ฐ ๋์ผ ๋ฏ์์ค๋์ ์ํ์ ๋๋ฅด๋ฉด ๋จ๋ ์์ธํ์ด์ง๋ฅผ ๋ง๋ค์ด๋ณผ ๊ฑด๋ฐ
์ค์ ํ์ด์ง๋ฅผ ๋ค๋ฅด๊ฒ ์ด๋์ํค๋๊ฑด ์๋๊ณ ๋ชจ๋ฌ์ฐฝ ์คํ์ผ๋ก ๋ง๋ค์ด๋ด ์๋ค.
โฒ ๋ชจ๋ฌ์ฐฝ์ด ๋ญ๋๋ฉด ๊ทธ๋ฅ ๋ฐฐ๊ฒฝ๊น๋งฃ๊ณ ์์ ํ์ ์ฐฝ์๋ UI๋ฅผ ๋ปํฉ๋๋ค.
์ํ๋ช ์ ํด๋ฆญํ๋ฉด ์ด๊ฑธ ๋์๋ณผ๊ฒ๋๋ค.
ํ์ง๋ง ๋ชจ๋ฌ์ฐฝ๋ง ๋ฐฐ์ ๋ค๊ณ ๋ชจ๋ฌ์ฐฝ๋ง ๋ง๋ค ์ ์๋ ์ฌ๋์ด ๋๋ฉด ์๋๊ธฐ ๋๋ฌธ์
Vue๋ก ๋์ ์ธ UI ๋ง๋๋ Step์ ์ค๋ช ํด๋๋ฆฌ๊ฒ ์ต๋๋ค.
1. ํ์ฌ HTML UI์ ์ํ๋ฅผ ๋ฐ์ดํฐ๋ก ์ ์ฅํด๋ (์ง๊ธ ๋ณด์ด๋์ง ์๋ณด์ด๋์ง ์ด๋ฐ๊ฑฐ)
2. ๊ทธ ์ํ์ ๋ฐ๋ผ HTML UI์ ๋ณด์ฌ์ค์ง ๋ง์ง๋ฅผ Vue๋ฌธ๋ฒ์ผ๋ก ์์ฑํจ
์ด๊ฒ๋ง ๊ธฐ์ตํด๋์๋ฉด ๋ชจ๋ฌ์ฐฝ ๋ง๊ณ ๋ ํญ, ์๋ธ๋ฉ๋ด ๋ฑ ๋๋ฅด๋ฉด ๋์ํ๋ UI๋ค์ ๊ตฌ๊ธ ๋์ ์์ด๋ ์์์ ๋ง๋ค ์ ์๊ฒ๋ฉ๋๋ค.
๋ง์ด ์ถ์์ ์ด๋ผ ๋ญ์ง ์์ง ๋ชจ๋ฅด๊ฒ ์ผ๋ฉด ๋ชจ๋ฌ์ฐฝ์ด๋ ๋ฐ๋ผ ๋ง๋ค์ด๋ด ์๋ค. ๊ทธ๋ผ ์ดํด๋ฉ๋๋ค.
01. ๊ทธ ์ ์ ์ ๊น ์ด๋ฏธ์ง ๋ฃ๋ ๋ฒ
์ด๋ฏธ์ง๋ฅผ src ํด๋ ์์ ์๋ฌด๋ฐ๋ ๋ฃ์ผ์๊ณ
<img src="./๊ฒฝ๋ก">
๋ฅผ ์ ์ผ์๋ฉด ์ด๋ฏธ์ง ๋์ต๋๋ค. ๋
public
ํด๋์ ๋ฃ์ผ์ค ๊ฑฐ๋ฉด ์ฝ๊ฐ ๋ค๋ฅธ๋ฐ /๊ฒฝ๋ก
๋ผ๊ณ ์ ์ผ๋ฉด ๋ฉ๋๋ค.
(public
ํด๋์ ๋ฃ์ผ๋ฉด ๋์ค์ ๋ฐํํ ๋ ์ด๋ฏธ์ง๊ฐ ์ด๋ฆ์ด ๋ณํ์ง์์ต๋๋ค src
๋ ์์๋ก ๋ฐ๊ฟ์ค)
๋ฐฐ์ด ๊ธฐ๋ ์ผ๋ก ํ๋จ์ ์ฒจ๋ถ๋ ์๋ฃธ๋ค ์ด๋ฏธ์ง๋ฅผ ์ง์ด๋ฃ์ด๋ณด์ญ์์ค.
์ด๋ฏธ์ง ํฌ๋๊น ์ด๋ฏธ์ง์๋ค๊ฐ width
์ margin-top
์ด๋ฐ ๊ฑธ๋ก ์คํ์ผ๋ง์ข ํด๋ณด์๊ณ ์.
02. ๋ชจ๋ฌ์ฐฝ ๋ง๋ค๊ธฐ
๋ญ๊ฐ ๋ฒํผ๋๋ฅด๋ฉด ๋ชจ๋ฌ์ฐฝ์ ๋์๋ณด๊ณ ์ถ์ผ๋ฉด
๋ชจ๋ฌ์ฐฝ๋ถํฐ HTML CSS๋ก ๋ง๋์๊ธธ ๋ฐ๋๋๋ค.
๋ญ๊ฐ ๊ฐ์๊ธฐ ๋ฑ์ฅํ๋ UI๋ค์ ๋ค ๋ฏธ๋ฆฌ ๋ง๋ค์ด๋๊ณ ์ํ ๋ ๋์์ฃผ๋ ๋ฐฉ์์ด๋๊น์.
<div class="black-bg">
<div class="white-bg">
<h4>์์ธํ์ด์ง</h4>
<p>์์ธํ์ด์ง๋ด์ฉ์</p>
</div>
</div>
body {
margin : 0;
}
div {
box-sizing: border-box;
}
.black-bg {
width: 100%; height:100%;
background: rgba(0,0,0,0.5);
position: fixed; padding: 20px;
}
.white-bg {
width: 100%; background: white;
border-radius: 8px;
padding: 20px;
}
์ด๋ ๊ฒ HTML๊ณผ CSS๋ฅผ ์ด๋๊ฐ์ ์ง๋์ผ์๊ธธ ๋ฐ๋๋๋ค.
์ด๋ฒ HTML ์ฝ๋๋ ์ข ์์ ์ ๋๊ฒ ์ข์ต๋๋ค.
๊ทผ๋ฐ ๊ธฐ๋ฅ๊ฐ๋ฐ ์ด๋ป๊ฒ ํ ๊ฒ๋๊น. ์ํ์ ๋ชฉ์ ๋๋ฅด๋ฉด ๋ชจ๋ฌ์ฐฝ์ด ๋ฟ ํ๊ณ ๋ ์ผํฉ๋๋ค.
๊ทธ๋ฅ Vue๋ก ๋์ ์ธ UI ๋ง๋๋ Step์ ์ค๋ช ํด๋๋ฆฌ๊ฒ ์ต๋๋ค.
-
ํ์ฌ HTML UI์ ์ํ๋ฅผ ๋ฐ์ดํฐ๋ก ์ ์ฅํด๋ (์ง๊ธ ๋ณด์ด๋์ง ์๋ณด์ด๋์ง ์ด๋ฐ๊ฑฐ)
-
๊ทธ ์ํ์ ๋ฐ๋ผ HTML UI๋ฅผ ๋ณด์ฌ์ค์ง ๋ง์ง๋ฅผ Vue๋ฌธ๋ฒ์ผ๋ก ์์ฑํจ
์ด๊ฒ๋ง ๊ธฐ์ตํด๋์๋ฉด ๋ชจ๋ UI๊ธฐ๋ฅ์ ๊ฑฐ์ ๋ค ํผ์ ๋ง๋ค ์ ์์๊ฑธ์
๊ทธ๋์
1. ํ์ฌ ๋ชจ๋ฌ์ฐฝ์ ์ํ๋ฅผ ๋ฐ์ดํฐ๋ก ์ ์ฅํด๋ก๋๋ค.
๋ชจ๋ฌ์ฐฝ์ ๋ณด์ด๋/์๋ณด์ด๋ ์ํ๋ง ์กด์ฌํฉ๋๋ค. ๊ทธ๋์ ์ด๊ฑธ ๋ฐ์ดํฐ๋ก ํํํด์ ์ ์ฅํด๋๋ผ๋ ์๋ฆฌ์ ๋๋ค.
data(){
return {
๋ชจ๋ฌ์ฐฝ์ด๋ ธ๋ : true,
}
}
์ ๋ ์ด๋ ๊ฒ true/false
๋ก ๋ํ๋ด๊ณ ์ถ์ด์ ์ ๋ ๊ฒ ์จ๋จ์ต๋๋ค.
0๋๋ 1 ์ด๋ ๊ฒ ํํํด๋ ์ ํ ์๊ด์์ต๋๋ค ๋๋ค ๋ง์
๋ฏธ๋ฆฌ ์ฑ์๋๋ ๊ฐ์ ๊ธฐ๋ณธ๊ฐ์ด๋ผ๊ณ ์๊ฐํด๋ ๋๊ฒ ์ต๋๋ค.
1๋ฒ๊ธฐ๋ฅ ๊ฐ๋ฐ ๋
**2. ๋ฐ์ดํฐ ์ํ์ ๋ฐ๋ผ HTML UI์ ๋ณด์ฌ์ค์ง ๋ง์ง๋ฅผ Vue๋ฌธ๋ฒ์ผ๋ก ์์ฑํจ **
false๋ฉด ์จ๊ธฐ๊ณ true๋ฉด ์๊น ๋ง๋ <div>
๋ฅผ ๋ณด์ฌ์ฃผ์๋ ๊ฒ๋๋ค.
๊ทธ๋ฌ๋ ค๋ฉด ํ๋์ ์๋ก์ด ๋ฌธ๋ฒ์ด ํ์ํฉ๋๋ค.
HTML ํ๊ทธ ์์ v-if="์กฐ๊ฑด์"
์ ์ฌ์ฉํ๋ฉด ์กฐ๊ฑด์์ด ์ฐธ์ผ ๋๋ง HTML์ ๋ณด์ฌ์ค๋๋ค.
๊ฐ๋จํ Vue ๋ฌธ๋ฒ์ธ๋ฐ ์ด๊ฑฐ ์ฐ๋ฉด 2๋ฒ์ ๊ตฌํ๊ฐ๋ฅํฉ๋๋ค.
<div class="black-bg" v-if="๋ชจ๋ฌ์ฐฝ์ด๋ ธ๋ == true">
<div class="white-bg">
<h4>์์ธํ์ด์ง</h4>
<p>์์ธํ์ด์ง๋ด์ฉ์</p>
</div>
</div>
๊ทธ๋์ ์ด๋ ๊ฒ ์ฐ๋ฉด ๋ชจ๋ฌ์ฐฝ์ด๋ ธ๋๋ผ๋ ๋ฐ์ดํฐ๊ฐ true
์ผ ๋๋ง
<div>
๋ฅผ ๋ณด์ฌ์ฃผ๋๊ฒ๋๋ค.
2๋ฒ ๊ฐ๋ฐ ๋์ ๋๋ค.
๊ทธ๋ผ ๋ชจ๋ฌ์ฐฝ ์ ํ ์ด ์๋ฃ๋๊ฒ๋๋ค.
์ด์ ์ฌ๋ฌ๋ถ์ ๋ชจ๋ฌ์ฐฝ์ด๋ ธ๋ ๋ผ๋ ๋ฐ์ดํฐ๋ฅผ ์กฐ์ํ๋ฉด ๋ชจ๋ฌ์ฐฝ์ ์ผ๊ณ ๋ ์ ์์ต๋๋ค.
UI๋ง๋ค ๋ ์ผ์ข ์ ์ค์์น๊ฐ์๊ฑธ ๋ฏธ๋ฆฌ ๋ง๋ค์ด๋๋ค๊ณ ์๊ฐํ๋ฉด ๋ฉ๋๋ค.
์ค์์น๋ง๋๋ ๋ฒ์ ์ ๋ ๊ฒ 1๋ฒ 2๋ฒ ๋ฐ๋ผ์ฃผ๋ฉด ๋๊ณ
์ค์์น๋ฅผ ์ผ๊ณ ๋๋๊ฑด ๋ชจ๋ฌ์ฐฝ์ด๋ ธ๋
๋ผ๋ ๋ฐ์ดํฐ๋ฅผ ์กฐ์ํ๋ฉด ๋ ์๋๊ฒ ์ต๋๊น.
Q. ๊ทธ๋ผ ์ํ์ ๋ชฉ์ ๋๋ ์ ๋ ๋ชจ๋ฌ์ฐฝ์ ์ด๋ ค๋ฉด ์ฝ๋ ์ด๋ป๊ฒ์ง์ฃ ?
๊ทธ๋๊น ๋ชจ๋ฌ์ฐฝ์ด๋ ธ๋
์ค์์น๋ฅผ ์ผ๋ ค๋ฉด ์ด๋ป๊ฒ ์ฝ๋์งญ๋๊น.
์ ๊ฐ์์์ ๋ฐฐ์ด๊ฑด ์์์ ํด๋ณด์๊ธธ ๋ฐ๋๋๋ค.
์ค๋์ ์์ :
data(){}
์ด ๋ถ๋ถ์ ๋ฆฌ์กํธ ์ด๋ฐ ๊ณณ์์ state
๋ผ๊ณ ๋ถ๋ฆ
๋๋ค.
๋ญ๊ฐ ์ ๋ณด ์ ์ฅํ๋ ๊ณณ์ด๊ธฐ๋ ํ๊ณ
UI์ ํ์ฌ ์ํ๋ฅผ ์ ์ฅํ๋ ๊ณณ์ด๊ธฐ๋ ํ๋๊น์.
์ํ๋ ์์ด๋ก state
์
๋๋ค.
๋๊ธ๋จ๊ธฐ๊ธฐ