๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
[๊ฐœ๋ฐœ] Practice/Vue.js

[Vue.js] Vue ๋ฐ˜๋ณต๋ฌธ v-for ์‚ฌ์šฉํ•ด๋ณด๊ธฐ

by Connecting-the-dots 2022. 3. 31.
728x90
๋ฐ˜์‘ํ˜•

๐Ÿ’ก ์‹ค์Šต ํฌ์ธํŠธ!

  • ๋ฐ˜๋ณต๋ฌธ ์—†์ด ์ƒ๋‹จ๋ฉ”๋‰ด๋ฅผ ๋งŒ๋“  ํ›„ v-for ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•ด๋ณด์•˜๋‹ค.

๐Ÿ’œ ๋ฐ˜๋ณต๋ฌธ ์—†์ด ์ƒ๋‹จ๋ฉ”๋‰ด ๋งŒ๋“ค๊ธฐ

๐Ÿค HTML

<div class="navbar">
    <a>Home</a>
    <a>Rooms</a>
    <a>About</a>
</div>
  • ๋ฐ˜๋ณต๋ฌธ ์—†์ด ์ƒ๋‹จ๋ฉ”๋‰ด๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด๋ฏ€๋กœ ๋ฉ”๋‰ด๋ฐ”๊ฐ€ ๋  div ํƒœ๊ทธ ์•ˆ์— a ํƒœ๊ทธ 3๊ฐœ๋ฅผ ๋„ฃ์–ด ๋ฉ”๋‰ด๋ฅผ 3๊ฐœ ์ถ”๊ฐ€ํ•ด์ฃผ์—ˆ๋‹ค.

๐Ÿค CSS

.navbar {
	padding: 15px 0;
	background: #6667AB;
	color: white;
	font-size: 20px;
	border-radius: 5px;
}

.navbar a {
	padding: 5px 10px;
	margin : 0 10px;
}

.navbar a:hover {
	background: white;
	cursor: pointer;
	border-radius: 5px;
	color: #6667AB;
	transition: all 1s;
}
  • ๊ทธ๋ฆฌ๊ณ  ๊น”๋”ํ•˜๊ฒŒ style ์„ ์ž…ํ˜€์ฃผ์—ˆ๋‹ค.

๐Ÿค ์ƒ๋‹จ๋ฉ”๋‰ด ๋ฏธ๋ฆฌ๋ณด๊ธฐ

  • ์—ฌ๊ธฐ๊นŒ์ง€ ํ•˜๊ณ  ๋‚˜๋ฉด ์œ„์™€ ๊ฐ™์ด ์‹ฌํ”Œํ•œ ์ƒ๋‹จ๋ฉ”๋‰ด๊ฐ€ ์™„์„ฑ๋œ๋‹ค.

๐Ÿ’œ ๋ฐ˜๋ณต๋ฌธ์„ ํ™œ์šฉํ•˜์—ฌ ์ƒ๋‹จ๋ฉ”๋‰ด ๋งŒ๋“ค๊ธฐ

๐Ÿค v-for HTML ๋ฐ˜๋ณต๋ฌธ ๋งŒ๋“ค๊ธฐ

<div class="navbar">
    <a>Home</a>
    <a>Rooms</a>
    <a>About</a>
</div>
  • ์œ„์™€ ๊ฐ™์€ ์ฝ”๋“œ๋Š” a ํƒœ๊ทธ๊ฐ€ ์—ฌ๋Ÿฌ๋ฒˆ ๋ฐ˜๋ณต๋˜๋ฏ€๋กœ v-for ๋ฌธ์„ ์ด์šฉํ•˜์—ฌ ์ถ•์•ฝ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
<script>
export default {
	name: "App",
	data(){
		return {
			navbar : ['Home', 'Rooms', 'About']
		}
	}
};
</script>

 

<div class="navbar">
    <a v-for="(menu, i) in navbar" :key="i">{{ menu }}</a>
</div>
  • ๋จผ์ €, ๋ฐ˜๋ณตํ•  ํƒœ๊ทธ์— v-for ์ด๋ผ๋Š” ์†์„ฑ์„ ๋„ฃ๊ณ  v-for="์š”์†Œ์ด๋ฆ„ in ์ˆซ์žํ˜น์€data ๋ณด๊ด€ํ•จ์˜๋ฐ์ดํ„ฐ" ์™€ ๊ฐ™์€ ํ˜•์‹์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด์ค€๋‹ค.
  • ๊ทธ๋ฆฌ๊ณ  ์ด๋Ÿฐ ๋ฐ˜๋ณต๋ฌธ์—๋Š” ๋ฐ˜๋ณตํ•œ ์š”์†Œ๋“ค์„ ๊ตฌ๋ถ„์ง“๊ธฐ ์œ„ํ•œ key ๊ฐ’์„ ๋„ฃ์–ด์ฃผ์–ด์•ผ ํ•˜๋ฏ€๋กœ :key="์œ ๋‹ˆํฌํ•œ๊ฐ’" ๊ณผ ๊ฐ™์ด ์ถ”๊ฐ€๋กœ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด์ค€๋‹ค.
  • ์ด๋ ‡๊ฒŒ ์™„์„ฑ๋œ HTML ํƒœ๊ทธ๋Š” ์ˆซ์ž ํ˜น์€ data ๋ณด๊ด€ํ•จ์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ์˜ ๊ธธ์ด๋งŒํผ ๋ฐ˜๋ณต์ƒ์„ฑ๋œ๋‹ค.
  • ๋‚˜์˜ ๊ฒฝ์šฐ data ๋ณด๊ด€ํ•จ์— ์ €์žฅ๋œ navbar ๋ผ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ์–ด์ฃผ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— navbar ๋ผ๋Š” array ์ž๋ฃŒํ˜•์˜ ๊ธธ์ด์ธ 3๋งŒํผ HTML ํƒœ๊ทธ๊ฐ€ ๋ฐ˜๋ณต์ƒ์„ฑ๋˜๋Š” ๊ฒƒ์ด๋‹ค.
  • ๊ทธ๋ฆฌ๊ณ  ๋ฐ˜๋ณต๋ฌธ์ด ๋ฐ˜๋ณต๋  ๋•Œ๋งˆ๋‹ค navbar ๋ผ๋Š” array ์ž๋ฃŒํ˜•์˜ ์š”์†Œ ํ•˜๋‚˜ํ•˜๋‚˜๊ฐ€ menu ๋ผ๋Š” ๋ณ€์ˆ˜๊ฐ€ ๋˜๋Š” ๊ฒƒ์ด๋‹ค.
  • ๊ทธ๋ž˜์„œ menu ๋ผ๋Š” ๋ณ€์ˆ˜๋ฅผ HTML ๋‚ด์šฉ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฐ”์ธ๋”ฉํ•˜์—ฌ ์ถœ๋ ฅํ•ด๋ณด๋ฉด ๋ฐ˜๋ณต๋ฌธ์ด ๋Œ ๋•Œ๋งˆ๋‹ค Home ์ด ๋˜๊ธฐ๋„ ํ•˜๊ณ , Shop ์ด ๋˜๊ธฐ๋„ ํ•˜๊ณ  About ์ด ๋˜๊ธฐ๋„ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
  • ๋˜ํ•œ ๋ณ€์ˆ˜ ์ž๋ฆฌ์— ์†Œ๊ด„ํ˜ธ๋ฅผ ๋„ฃ๊ฒŒ ๋˜๋ฉด ๋ณ€์ˆ˜๋ฅผ 2๊ฐœ๊นŒ์ง€ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.
  • ๋ณดํ†ต ์ฒซ๋ฒˆ์งธ๋กœ ๋งŒ๋“  ๋ณ€์ˆ˜(์œ„ ์ฝ”๋“œ์—์„œ menu)๋Š” navbar ๋ผ๋Š” array ์ž๋ฃŒํ˜•์˜ ๊ฐ ๋ฐ์ดํ„ฐ๊ฐ€ ๋˜๋Š” ๊ฒƒ์ด๊ณ , ๋‘๋ฒˆ์งธ๋กœ ๋งŒ๋“  ๋ณ€์ˆ˜(์œ„ ์ฝ”๋“œ์—์„œ i)๋Š” 0, 1, 2... ์ด๋Ÿฐ ์‹์œผ๋กœ 1์”ฉ ์ฆ๊ฐ€ํ•˜๋Š”, ๋ฐ˜๋ณตํšŸ์ˆ˜๋ฅผ ์•Œ๋ ค์ฃผ๋Š” ์ •์ˆ˜๊ฐ€ ๋˜๋Š”๋ฐ, ๊ด€์Šต์ ์œผ๋กœ ์ด๊ฒƒ์„ :key ์•ˆ์— ๋„ฃ์–ด์ค€๋‹ค.

๐Ÿค ์ƒ๋‹จ๋ฉ”๋‰ด ๋ฏธ๋ฆฌ๋ณด๊ธฐ

  • ์œ„์™€ ๊ฐ™์ด ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•œ ํ›„ ์ €์žฅ์„ ํ•ด๋„ ๊ธฐ์กด์— ๋ฐ˜๋ณต๋ฌธ ์—†์ด ์ž‘์„ฑํ•œ ์ฝ”๋“œ์™€ ๋™์ผํ•˜๊ฒŒ ์ƒ๋‹จ๋ฉ”๋‰ด๊ฐ€ ๋งŒ๋“ค์–ด์ง„ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 

728x90
๋ฐ˜์‘ํ˜•