[Vue.js] ๊ธฐ์ดˆ ๊ฐœ๋… ์ •๋ฆฌ - Watch, Array, for๋ฌธ(๋ฐ˜๋ณต๋ฌธ), if๋ฌธ

2022. 3. 8. 16:20ใ†Front-End ์ž‘์—…์‹ค/Vue.js

728x90
๋ฐ˜์‘ํ˜•

๐Ÿ—‚ ๋ชฉ์ฐจ

[Vue.js] ๊ธฐ์ดˆ ๊ฐœ๋… ์ •๋ฆฌ - ๊ธฐ๋ณธ ํ™˜๊ฒฝ ๊ตฌ์„ฑ

[Vue.js] ๊ธฐ์ดˆ ๊ฐœ๋… ์ •๋ฆฌ - Vue Router

[Vue.js] ๊ธฐ์ดˆ ๊ฐœ๋… ์ •๋ฆฌ - Vue LifeCycle Hook

[Vue.js] ๊ธฐ์ดˆ ๊ฐœ๋… ์ •๋ฆฌ - data(), Data ์ฒ˜๋ฆฌ

[Vue.js] ๊ธฐ์ดˆ ๊ฐœ๋… ์ •๋ฆฌ - Watch, Array, for๋ฌธ(๋ฐ˜๋ณต๋ฌธ), if๋ฌธ

 

 

 

๐Ÿฑ Git Hub ์ฃผ์†Œ : https://github.com/junyharang-FrontEnd-coding-study/vue.js-study

๐Ÿ“– ์ฐธ๊ณ  ์ž๋ฃŒ : https://www.youtube.com/watch?v=sqH0u8wN4Rs

 

 

 

๐Ÿš€ watch ๋ž€?

๊ฐœ๋ฐœ์ž๊ฐ€ ์ •์˜ํ•œ Data์— ๋Œ€ํ•ด ํ•ด๋‹น Data๊ฐ€ ์–ด๋–ป๊ฒŒ ๋ณ€๊ฒฝ๋˜๋Š”์ง€๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋ง ํ•˜๋Š” ์นœ๊ตฌ์ธ ๊ฒƒ์ด์—์š”.

 

์œ„์™€ ๊ฐ™์ด data Object์˜ Key ๊ฐ’์„ ํ•จ์ˆ˜ ํ˜•์‹์œผ๋กœ ๋งŒ๋“  ๋’ค ํ•ด๋‹น Data Value๊ฐ€ ๋ณ€๊ฒฝ์ด ๋˜๋ฉด Catch๋ฅผ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด์—์š”.

 

 

์œ„์™€ ๊ฐ™์ด watch์•ˆ์— input1()์— Inpu1 Data์˜ ๋‚ด์šฉ์„ ์ถœ๋ ฅ ํ•˜๋„๋ก ํ•˜๊ฒŒ ๋˜๋ฉด ๊ธฐ์กด์— button ๋“ฑ์œผ๋กœ Event๋ฅผ ๊ฑธ์–ด Click์ด ์ผ์–ด๋‚˜๋ฉด ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•ด์„œ Data๋ฅผ ๋ฐ›์•„ ์™”๋Š”๋ฐ, ํ”„๋กœ๊ทธ๋žจ ์ƒ์—์„œ ์–ด๋–ค Data์˜ ๊ฐ’์ด ๋ณ€๊ฒฝ๋˜๋Š”์ง€ ๋ชจ๋‹ˆํ„ฐ๋ง ํ•  ๋•Œ ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด์—์š”.

 

์ด๋ ‡๊ฒŒ `abcde`๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ํ•ด๋‹น ๋‚ด์šฉ์ด ์ถœ๋ ฅ ๋˜๋Š” ๊ฒƒ์„ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด์—์š”.

watch๋ฅผ ๊ฐ€์ง€๊ณ  Data๊ฐ€ ๋ณ€๊ฒฝ์ด ์ผ์–ด๋‚  ๋•Œ ์–ด๋–ค ์ž‘์—…์„ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ์ฝ”๋”ฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด์—์š”.

 

 

 

๐Ÿš€ Vue.js์˜ ๋ฐฐ์—ด(Array)

์›น ๊ฐœ๋ฐœ์„ ํ•  ๋•Œ, ๋ชฉ๋ก(List) ์กฐํšŒ๋‚˜, ์ƒ์„ธ ์กฐํšŒ ์‹œ์— ์—ฌ๋Ÿฌ Tag, ๋Œ“๊ธ€๋“ค์„ ๊ฐ€์ ธ์™€์•ผ ํ•  ๊ฒƒ์ด์—์š”.
์ด๋ ‡๊ฒŒ ์—ฌ๋Ÿฌ Data๋ฅผ ๋ฐ›์•„์˜ฌ ๋•Œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด ๋ฐฐ์—ด์ธ ๊ฒƒ์ด์—์š”.

๋จผ์ € data()์— options๋ผ๊ณ  ์„ ์–ธํ•˜๊ณ , Object๊ฐ€ ์—ฌ๋Ÿฌ๊ฐœ ๋“ค์–ด ์žˆ๋Š” ๋ฐฐ์—ด์„ ๋งŒ๋“ค์–ด ์ค„ ๊ฒƒ์ด์—์š”.

 

     ๐Ÿ”ฝ  Vue.js์˜ ๋ฐฐ์—ด๊ณผ ๋ฐ˜๋ณต(for)๋ฌธ

 

 

์œ„์™€ ๊ฐ™์ด select Tag๋ฅผ ํ†ตํ•ด option Tag๋ฅผ ๋งŒ๋“ค์–ด v-for๋ฅผ ๋งŒ๋“ค์—ˆ๋Š”๋ฐ, ์ด๊ฑด for๋ฌธ์ธ ๊ฒƒ์ด์—์š”.

v-for ํ˜•์‹ : `v-for="({Data}, {Index})"

์ฆ‰ ์•ž์— d๋Š” options๋ผ๋Š” ๋ฐฐ์—ด์—์„œ ๊ฐ€์ ธ์˜ค๊ฒŒ ๋  Data๋ฅผ ์˜๋ฏธํ•˜๊ณ , I๋Š” Index, ์ฆ‰, ๋ฐฐ์—ด์ด 3๊ฐœ๋‹Œ๊นŒ 0~2๊ฐ€ ๋  ๊ฒƒ์ด์—์š”.

 

 

๊ทธ๋Ÿฐ ๋’ค ๋’ค์— in์„ ์จ์ฃผ๊ณ , ๋ณ€์ˆ˜๋ช…์„ ์จ์ฃผ๊ฒŒ ๋˜๋ฉด ๋ฐฐ์—ด ๋ณ€์ˆ˜ ์•ˆ์— ์žˆ๋Š” ๊ฐ’์„ ํ•˜๋‚˜์”ฉ ๊ฐ€์ ธ์˜ค๋ฉด์„œ ๋ฐ˜๋ณต์„ ์ฒ˜๋ฆฌํ•˜๊ฒŒ ๋˜๋Š”๋ฐ, ๋Œ๋ฉด์„œ Index ๋ฒˆํ˜ธ๊นŒ์ง€ ๊ฐ€์ ธ์˜ค๋Š” ํ˜•์‹์ด ๋œ ๊ฒƒ์ด์—์š”. Java๋กœ ์น˜๋ฉด For-each๋ฌธ๊ณผ ๋น„์Šทํ•˜๋„ค์š”!

 

 

for ๋ฌธ์˜ ๊ฒฝ์šฐ key ๊ฐ’์„ ๋ฌด์กฐ๊ฑด ๋„ฃ์–ด์ฃผ์–ด์•ผ ํ•˜๋Š” ๊ฒƒ์ด์—์š”. ์ด key๊ฐ’์€ ํ•ด๋‹น ๋ฐ˜๋ณต๋ฌธ์„ ์œ ์ผํ•˜๊ฒŒ ์‹๋ณ„ํ•  ์ˆ˜ ์žˆ๋Š” ์ด๋ฆ„์„ ๋„ฃ๋Š”๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋  ๊ฑฐ ๊ฐ™์•„์š”.

 

 

๊ทธ๋ฆฌ๊ณ  {{d.v}}๋Š” ๊ฐ€์ ธ์˜จ Data์— ์œ„์— ๋ฐฐ์—ด์—์„œ ์„ ์–ธํ•œ Value ๊ฐ’์„ ๊ฐ€์ ธ์˜ค๋ผ๋Š” ์˜๋ฏธ์ธ ๊ฒƒ์ด์—์š”.

 

 

๊ทธ๋Ÿผ ์ด๋ ‡๊ฒŒ Select Box๊ฐ€ ๋งŒ๋“ค์–ด ์ง„ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด์—์š”.

 

 

๊ทธ๋Ÿฐ ๋’ค `:value="d.k"`๋ฅผ ์„ ์–ธํ•ด ์ฃผ๊ฒŒ ๋˜๋ฉด ์ด์šฉ์ž๊ฐ€ ๋ณด์ด๋Š” ํ™”๋ฉด์—์„œ๋Š” Data ์•ˆ์— Value ์ฆ‰, ๋„์‹œ ์ด๋ฆ„์ด ๋ณด์ด๊ฒ ์ง€๋งŒ, ์‹ค์ œ Server ๋‚ด๋ถ€์—์„œ๋Š” k๋กœ ์ •์˜ํ•œ S, B, J ๋“ฑ์„ ์ด์šฉํ•˜๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด์—์š”.

Vue.js์—์„œ๋Š” `:` ์ด๋ ‡๊ฒŒ ์ฝœ๋ก ์„ ์“ฐ๊ฒŒ ๋˜๋ฉด Data Value์— ๋ฐ”๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด์—์š”.

 

 

 

์ด๋ฒˆ์—๋Š” region ์ด๋ผ๋Š” ๋ณ€์ˆ˜์— "J"๋ผ๋Š” Key๋ฅผ ์ž…๋ ฅ ํ•ด ์ฃผ๊ณ , select Box ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ๋ณด์—ฌ์ค„ v-model์— "region"์„ ์„ ์–ธํ•˜๊ฒŒ ๋˜๋ฉด Two-Way ๋ฐฉ์‹์œผ๋กœ Bindding์ด ๋˜์–ด ์žˆ๋Š” ๊ฒƒ์ด๊ณ , 

 

์œ„์˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ๊ธฐ๋ณธ๊ฐ’์ด 'Jeju'๋กœ ๋˜์–ด ์žˆ๋Š” ๊ฒƒ์„ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด์—์š”.

 

 

์ด๋ฒˆ์—๋Š” table Tag๋ฅผ ํ†ตํ•ด์„œ ๋ฐฐ์—ด๊ณผ for๋ฌธ์„ ์ด์šฉํ•ด ๋ณด๋ ค๊ณ  ํ•˜๋Š” ๊ฒƒ์ด์—์š”.

 

 

์ด๋ ‡๊ฒŒ Table์ด ๋งŒ๋“ค์–ด ์ง€๋Š” ๊ฒƒ์„ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด์—์š”!

 

 

์ด๋ฒˆ์—๋Š” select Tag์— Even๋ฅผ ๊ฑธ์–ด์„œ Select Box๊ฐ€ ๋ณ€๊ฒฝ์ด ๋˜๋ฉด `changeRegion()`์ด ํ˜ธ์ถœ๋˜๋„๋ก ํ•  ๊ฒƒ์ด์—์š”.

 

 

 

 

์ด๋ ‡๊ฒŒ ํ•˜๊ฒŒ ๋˜๋ฉด select Box๊ฐ€ ๋ณ€๊ฒฝ์ด ๋˜๋ฉด changeRegion()์ด ํ˜ธ์ถœ์ด ๋˜๊ณ , ๊ทธ ์•ˆ์— ๊ฒฝ๊ณ ์ฐฝ์„ ์—ด๊ณ  this.region (Region ๋ณ€์ˆ˜์˜ ๊ฐ’)์„ ๊ฐ€์ ธ์˜ค๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด์—์š”.

 

 

 

๐Ÿš€ Vue.js์˜ ์กฐ๊ฑด(if)๋ฌธ

์ด๋ฒˆ์—๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด tableShow๋ผ๋Š” ๋ณ€์ˆ˜๋ฅผ ๋งŒ๋“ค๊ณ , ๊ธฐ๋ณธ๊ฐ’์„ false๋กœ ๋งŒ๋“ค์–ด ์ค„ ๊ฒƒ์ด์—์š”.
table์„ ์กฐ๊ฑด์— ๋งž์ถ”์–ด์„œ ๋ณด์—ฌ์คฌ๋‹ค๊ฐ€ ์•ˆ ๋ณด์—ฌ์คฌ๋‹ค๊ฐ€๋ฅผ ํ•ด๋ณด๊ธฐ ์œ„ํ•ด์„œ์—์š”.

 

tableShow ๋ณ€์ˆ˜ ์ƒ์„ฑ

 

๊ทธ๋Ÿฐ ๋’ค table Tag์— v-if๋ฅผ ๋„ฃ์–ด์ฃผ๊ณ  ํ•ด๋‹น ๋ณ€์ˆ˜๋ฅผ ๋„ฃ์–ด์ฃผ๊ฒŒ ํ•ด์ค„๊ฒƒ์ด์—์š”.
v-if๋Š” ์กฐ๊ฑด์ด ๋งŒ์กฑ๋˜๋ฉด ํ•ด๋‹น Element์— ๋Œ€ํ•ด Rendering ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๊ฒ ๋‹ค๋Š” ๊ฒƒ์ด์—์š”.

 

๋ณ€์ˆ˜์— ๊ธฐ๋ณธ๊ฐ’์ด `false`์ด๋‹Œ๊นŒ ํ•ด๋‹น table์ด ๋ณด์ด์ง€ ์•Š๋Š” ๊ฒƒ์ด์—์š”.

 

 

์ด๋ฒˆ์—๋Š” ํ•ด๋‹น ๋ณ€์ˆ˜ ๊ธฐ๋ณธ๊ฐ’์„ `true`๋กœ ๋ฐ”๊ฟ”๋ณผ ๊ฒƒ์ด์—์š”.

 

 

๊ทธ๋Ÿฌ๋ฉด ์œ„์™€ ๊ฐ™์ด table์ด ๋‹ค์‹œ ๋ณด์ด๊ฒŒ ๋˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด์—์š”.

 

 

     ๐Ÿ”ฝ  v-show๋ž€?

v-show๋Š” ๋˜‘๊ฐ™์ด ํ™”๋ฉด์— ๋ณด์—ฌ์ค„์ง€ ๋ง์ง€(rendering์„ ํ• ์ง€ ๋ง์ง€)๋ฅผ ์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ธ๋ฐ, v-if๋ž‘์€ ์ข€ ๋‹ค๋ฅธ ๊ฒƒ์ด์—์š”.

 

 

 

๋ฐ˜์‘ํ˜•

 

์œ„์™€ ๊ฐ™์ด ํ•ด๋‹น ๋ณ€์ˆ˜์˜ ๊ธฐ๋ณธ๊ฐ’์ด `false`์ด๋‹ค ๋ณด๋‹ˆ ํ™”๋ฉด์— ๋ณด์ด์ง€ ์•Š๋Š” ๊ฒƒ์ด์—์š”.

 

     ๐Ÿ”ฝ  v-show์™€ v-if์˜ ์ฐจ์ด์ 

v-if๋Š” ์กฐ๊ฑด์— ๋งŒ์กฑํ•˜์ง€ ์•Š์œผ๋ฉด ์•„์˜ˆ Rendering ์ž์ฒด๋ฅผ ํ•˜์ง€ ์•Š์ง€๋งŒ, v-show ๊ฐ™์€ ๊ฒฝ์šฐ๋Š” ์กฐ๊ฑด์— ๋งŒ์กฑํ•˜๊ณ , ์•ˆ ํ•˜๊ณ ๋ฅผ ๋– ๋‚˜์„œ ๋ฌด์กฐ๊ฑด Rendering์„ ํ•˜๋Š” ๊ฒƒ์ด์—์š”.

๊ทผ๋ฐ display option์—์„œ hidden๊ณผ ๊ฐ™์€ ๊ฒƒ๊ณผ ๊ฐ™์ด ์‹ค์ œ html Element๋Š” Rendering์€ ๋˜์—ˆ์œผ๋‚˜, ํ™”๋ฉด์—๋งŒ ๋ณด์—ฌ์ฃผ์ง€ ์•Š๋Š” ๊ฒƒ์ด ๋ฐ”๋กœ v-show์ธ ๊ฒƒ์ด์—์š”.

๊ทธ๋Ÿผ ์ด ๋‘๊ฐ€์ง€๋Š” ์–ด๋–จ ๋•Œ ์ ์ ˆํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์„๊นŒ์š”?

๊ฐœ๋ฐœ์„ ํ•  ๋•Œ ํ™”๋ฉด์—์„œ ๋ณด์—ฌ์กŒ๋‹ค๊ฐ€ ์•ˆ ๋ณด์—ฌ์กŒ๋‹ค๊ฐ€๋ฅผ ์ž์ฃผ ์ฒ˜๋ฆฌ๋ฅผ ํ•  ๋•Œ, v-if๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด Rendering์„ ํ–ˆ๋‹ค๊ฐ€ ์•ˆ ํ–ˆ๋‹ค๊ฐ€๊ฐ€ ๋ฐ˜๋ณต์ด ๋˜๋Š”๋ฐ, Rendering์„ ํ•˜๋Š” ๊ฒƒ๊ณผ destroy๋ฅผ ํ•  ๋•Œ Resource๊ฐ€ ๋งŽ์ด ๋“ค๊ฒŒ ๋˜๋Š”๋ฐ, v-show ๊ฐ™์€ ๊ฒฝ์šฐ์—” Rendering์„ ํ–ˆ์ง€๋งŒ, ํ™”๋ฉด์— ๋ณด์ด์ง€๋งŒ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ด๋Ÿด ๊ฒฝ์šฐ๋Š” v-show๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ ์ ˆํ•œ ํŒ๋‹จ์ด ๋  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด์—์š”.

๋ฐ˜๋Œ€๋กœ ํŠน์ • ์กฐ๊ฑด์— ์ด๋ฃจ์–ด์กŒ์„ ๋•Œ๋งŒ, ํ™”๋ฉด์— ๋ณด์—ฌ์ง€๊ฒŒ ๋  ๊ฑด๋ฐ, ์ง€์†์ ์œผ๋กœ ๋ณด์˜€๋‹ค ์•ˆ ๋ณด์˜€๋‹ค๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด ์˜ˆ๋ฅผ ๋“ค์–ด ๊ด€๋ฆฌ์ž๋งŒ ๋ณผ ์ˆ˜ ์žˆ๋Š” ํŽ˜์ด์ง€๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ • ํ–ˆ์„ ๋•Œ, ๊ด€๋ฆฌ์ž๊ฐ€ ์•„๋‹Œ ํšŒ์›์€ ์ ‘๊ทผ์„ ๋ง‰์•„์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๋Ÿด ๋•Œ๋Š” v-if๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ ์ ˆํ•œ ํŒ๋‹จ์ด ๋  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด์—์š”.

์ด๋ ‡๊ฒŒ ๋˜๋ฉด ๊ด€๋ฆฌ์ž๊ฐ€ ์•„๋‹Œ ์ด์ƒ ํ•ด๋‹น Page๋Š” Rendering ์ž์ฒด๊ฐ€ ์•ˆ๋˜๊ธฐ ๋•Œ๋ฌธ์— Resource๋„ ์•„๋‚„ ์ˆ˜ ์žˆ๊ณ , ๋ณด์•ˆ๋„ ์ง€ํ‚ฌ ์ˆ˜ ์žˆ๊ฒ ๋„ค์š”!

728x90
๋ฐ˜์‘ํ˜•