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

[Vue.js] Vue ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋กœ click ๊ฐ์ง€ํ•˜๊ธฐ

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

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

  • ์ด๋ฒˆ ์‹œ๊ฐ„์—๋Š” JavaScript ๋‚˜ React ์—์„œ ์‚ฌ์šฉํ•˜๋˜ click ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋ฅผ Vue ์—์„œ๋Š” ์–ด๋–ค ์‹์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š”์ง€ ์•Œ์•„๋ณด์•˜๋‹ค.

๐Ÿ’œ "ํ—ˆ์œ„๋งค๋ฌผ์‹ ๊ณ " ๋ฒ„ํŠผ ํด๋ฆญ์‹œ ์‹ ๊ณ  ์ˆ˜ ํ‘œ์‹œํ•˜๊ธฐ 

๐Ÿค ๋ ˆ์ด์•„์›ƒ ๋งŒ๋“ค๊ธฐ

<div>
    <h4>{{ rooms[0] }}</h4>
    <p>{{ prices[0] }}๋งŒ์›</p>
    <button>ํ—ˆ์œ„๋งค๋ฌผ์‹ ๊ณ </button> <span>์‹ ๊ณ  ์ˆ˜: 0</span>
</div>
  • ์œ„์™€ ๊ฐ™์ด ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์—ฌ ํ—ˆ์œ„๋งค๋ฌผ์‹ ๊ณ  ๋ฒ„ํŠผ์„ ๋งŒ๋“ค๊ณ , ๊ทธ ์˜†์— ์‹ ๊ณ  ์ˆ˜๋ฅผ ํ‘œ์‹œํ•˜๋Š” ๋ ˆ์ด์•„์›ƒ์„ ๋งŒ๋“ค์–ด๋ณด์•˜๋‹ค.

 


๐Ÿค "ํ—ˆ์œ„๋งค๋ฌผ์‹ ๊ณ " ๋ฒ„ํŠผ ์˜† ์‹ ๊ณ  ์ˆ˜ ๋ถ€๋ถ„ ๋ฐ์ดํ„ฐ๋ฐ”์ธ๋”ฉํ•˜๊ธฐ

<script>
export default {
	name: "App",
	data(){
		return {
			navbar : ['Home', 'Rooms', 'About'],
			rooms : ['๋‘”์‚ฐ๋™ ์›๋ฃธ', '๊ฐˆ๋งˆ๋™ ์›๋ฃธ', '๊ดด์ •๋™ ์›๋ฃธ'],
			prices : [55, 43, 38],
			report : [0, 0, 0],
		}
	},
};
</script>
  • ๋จผ์ €, ์‹ ๊ณ  ์ˆ˜๋ฅผ ๊ธฐ๋ก ๋ฐ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๋ณ€์ˆ˜๋‚˜ ๋ฐ์ดํ„ฐ๊ฐ€ ํ•„์š”ํ•˜๋ฏ€๋กœ, data ๋ณด๊ด€ํ•จ ์•ˆ์— report ๋ผ๋Š” array ์ž๋ฃŒํ˜•์„ ๊ฐ’์œผ๋กœ ๊ฐ€์ง€๋Š” object ๋ฅผ ํ•˜๋‚˜ ์ถ”๊ฐ€ํ•ด์ฃผ์—ˆ๋‹ค.
  • ์œ„ html ์ฝ”๋“œ์—๋Š” ๋ฒ„ํŠผ์ด ํ•˜๋‚˜์ง€๋งŒ, ์ „์ฒด html ์ฝ”๋“œ์— ์ด 3๊ฐœ์˜ ๋ฒ„ํŠผ์ด ํ•„์š”ํ•˜๋ฏ€๋กœ report ๋Š” ์ˆซ์ž๊ฐ€ ์•„๋‹ˆ๋ผ 3๊ฐœ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๋“ค์–ด๊ฐ„ array ์ž๋ฃŒํ˜•์œผ๋กœ ๋งŒ๋“ค์–ด ๊ฐ’์œผ๋กœ ๋„ฃ์–ด์ค€ ๊ฒƒ์ด๋‹ค.

 

<div>
    <h4>{{ rooms[0] }}</h4>
    <p>{{ prices[0] }}๋งŒ์›</p>
    <button>ํ—ˆ์œ„๋งค๋ฌผ์‹ ๊ณ </button> <span>์‹ ๊ณ  ์ˆ˜: {{ report[0] }}</span>
</div>
  • ์ด์ œ ์‹ ๊ณ  ์ˆ˜ ๋ผ๋Š” ๊ธ€์ž ์˜†์— {{ report[0] }} ์ด๋ผ๊ณ  ๋„ฃ์–ด์ฃผ๋ฉด data ๋ณด๊ด€ํ•จ์˜ report ์— ํ•ด๋‹นํ•˜๋Š” array ์ž๋ฃŒํ˜•์˜ 0๋ฒˆ ์ธ๋ฑ์Šค ๋ฐ์ดํ„ฐ๊ฐ€ ๋“ค์–ด์˜ค๋ฏ€๋กœ, ์ด์ „์— ํ•˜๋“œ์ฝ”๋”ฉํ–ˆ๋˜ ๋•Œ์™€ ๋™์ผํ•˜๊ฒŒ ๋ธŒ๋ผ์šฐ์ €์—์„œ 0 ์ด๋ผ๋Š” ์ˆซ์ž๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿค "ํ—ˆ์œ„๋งค๋ฌผ์‹ ๊ณ " ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ ์‹ ๊ณ  ์ˆ˜ ์ฆ๊ฐ€ํ•˜๋Š” ๊ธฐ๋Šฅ ๋งŒ๋“ค๊ธฐ (ํ•จ์ˆ˜ ์‚ฌ์šฉX)

<div>
    <h4>{{ rooms[0] }}</h4>
    <p>{{ prices[0] }}๋งŒ์›</p>
    <button @click="report[0]++">ํ—ˆ์œ„๋งค๋ฌผ์‹ ๊ณ </button> <span>์‹ ๊ณ  ์ˆ˜: {{ report[0] }}</span>
</div>
  • JavaScript ์—์„œ๋Š” onclick='' ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋ฅผ, React ์—์„œ๋Š” onClick="" ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋ฅผ html ํƒœ๊ทธ์— ๋‹ฌ์•„์ฃผ์—ˆ์—ˆ๋‹ค.
  • ๋ฐ˜๋ฉด Vue ์—์„œ๋Š” v-on:click="" ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋‚˜ v-on: ์„ ์ถ•์•ฝํ•œ @ ๊ธฐํ˜ธ๋ฅผ ์‚ฌ์šฉํ•œ @click="" ๊ณผ ๊ฐ™์€ ํ˜•ํƒœ๋กœ ๋™์ผํ•œ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋‚ด๊ฐ€ ์›ํ•˜๋Š” ๊ธฐ๋Šฅ์€ ํ˜„์žฌ ์‹ ๊ณ  ์ˆ˜์ธ report[0] ์— + 1 ์„ ํ•ด์ฃผ๋Š” ๊ฒƒ์ด๋ฏ€๋กœ ์œ„์™€ ๊ฐ™์ด report[0]++ ๋กœ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด์ฃผ์—ˆ๋‹ค.
  • ์ด ์™ธ์—๋„ report[0} += 1 ๊ณผ ๊ฐ™์ด ์ž‘์„ฑํ•ด๋„ ๋™์ผํ•œ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.
  • ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋Š” JavaScript ๋‚˜ React ์ฒ˜๋Ÿผ @click ์™ธ์—๋„ @mouseover, @input ๋“ฑ๊ณผ ๊ฐ™์€ ๊ฒƒ๋“ค์ด ์žˆ๋‹ค.

๐Ÿค "ํ—ˆ์œ„๋งค๋ฌผ์‹ ๊ณ " ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ ์‹ ๊ณ  ์ˆ˜ ์ฆ๊ฐ€ํ•˜๋Š” ๊ธฐ๋Šฅ ๋งŒ๋“ค๊ธฐ (ํ•จ์ˆ˜ ์‚ฌ์šฉO)

<div>
    <h4>{{ rooms[0] }}</h4>
    <p>{{ prices[0] }}๋งŒ์›</p>
    <button @click="increase(0)">ํ—ˆ์œ„๋งค๋ฌผ์‹ ๊ณ </button> <span>์‹ ๊ณ  ์ˆ˜: {{ report[0] }}</span>
</div>
  • ์ด๋ฒˆ์—๋Š” ๋™์ผํ•œ ๊ธฐ๋Šฅ์ด์ง€๋งŒ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด๋ณด์•˜๋‹ค.
  • ๋จผ์ € report[0]++ ๋Œ€์‹ ์— increase ๋ผ๋Š” ์ด๋ฆ„์˜ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ๊ฒƒ์ด๋ฏ€๋กœ increase() ์˜ ํ˜•ํƒœ๋กœ ์ž‘์„ฑํ•ด์ฃผ์—ˆ๋‹ค.
  • ๊ทธ๋ฆฌ๊ณ  ๊ฐ ๋ฒ„ํŠผ๋งˆ๋‹ค ๋…๋ฆฝ์ ์œผ๋กœ ์ž‘๋™ํ•ด์•ผ ํ•˜๋ฏ€๋กœ, ์ฒซ๋ฒˆ์งธ ๋ฒ„ํŠผ์€ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ 0 ์„ ๋ฐ›์•„์ฃผ์—ˆ๋‹ค. 
<script>
export default {
	name: "App",
	data(){
		return {
			navbar : ['Home', 'Rooms', 'About'],
			rooms : ['๋‘”์‚ฐ๋™ ์›๋ฃธ', '๊ฐˆ๋งˆ๋™ ์›๋ฃธ', '๊ดด์ •๋™ ์›๋ฃธ'],
			prices : [55, 43, 38],
			report : [0, 0, 0],
		}
	},
	methods: {
		increase(i){
			this.report[i]++;
		}
	},
};
</script>
  • ์ด์ œ increase() ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด์ฃผ๋ฉด ๋œ๋‹ค.
  • methods ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๋ถ€๋ถ„์ด ์žˆ์œผ๋ฉด ๋ฐ”๋กœ ๊ทธ ์•ˆ์— ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด์ฃผ๋ฉด ๋˜๊ณ , ์—†๋‹ค๋ฉด ์œ„์™€ ๊ฐ™์ด methods: { } ํ˜•ํƒœ๋กœ ์ž‘์„ฑํ•ด์ค€ ํ›„ ๊ทธ ์•ˆ์— ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด์ฃผ๋ฉด ๋œ๋‹ค.
  • ๊ทธ๋ฆฌ๊ณ  data ๋ณด๊ด€ํ•จ์—์„œ data ๋ฅผ ๊ฐ€์ ธ๋‹ค ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ๊ผญ this.๋ฐ์ดํ„ฐ์ด๋ฆ„ ์˜ ํ˜•ํƒœ๋กœ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.
  • this ๋Š” ๋ฐ”๋กœ ์œ„ data ๋ณด๊ด€ํ•จ์„ ๋‹ด์€ ํฐ object ๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.

 

728x90
๋ฐ˜์‘ํ˜•