Search
Duplicate
๐Ÿ˜€

05. Vue.js

ํƒœ๊ทธ

Vue.js

โ€ข
์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ์˜คํ”ˆ ์†Œ์Šค Progressive Framework
ํŠน์ง•
โ€ข
Approachable (์ ‘๊ทผ์„ฑ)
โ€ข
Versatile (์œ ์—ฐ์„ฑ)
โ€ข
Performant (๊ณ ์„ฑ๋Šฅ)

MVVM Pattern

โ€ข
Model + View + ViewModel
โ—ฆ
Model : ์ˆœ์ˆ˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ฐ์ฒด
โ—ฆ
View : ์›นํŽ˜์ด์ง€์˜ DOM
โ—ฆ
ViewModel : Vue์˜ ์—ญํ• 
โ€ข
๊ธฐ์กด์—๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ view์— ํ•ด๋‹นํ•˜๋Š” DOM์— ์ ‘๊ทผํ•˜๊ฑฐ๋‚˜ ์ˆ˜์ •ํ•˜๊ธฐ ์œ„ํ•ด jQuery์™€ ๊ฐ™์€ library ์ด์šฉ.
โ€ข
Vue๋Š” view์™€ model์„ ์—ฐ๊ฒฐํ•˜๊ณ  ์ž๋™์œผ๋กœ ๋ฐ”์ธ๋”ฉํ•˜๋ฏ€๋กœ ์–‘๋ฐฉํ–ฅ ํ†ต์‹ ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•จ

Vue instance ์ƒ์„ฑ

el
โ€ข
Vue๊ฐ€ ์ ์šฉ๋  ์š”์†Œ ์ง€์ •.
โ€ข
CSS Selector or HTML Element
data
โ€ข
Vue์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์ •๋ณด ์ €์žฅ
โ€ข
๊ฐ์ฒด ๋˜๋Š” ํ•จ์ˆ˜์˜ ํ˜•ํƒœ
template
โ€ข
ํ™”๋ฉด์— ํ‘œ์‹œํ•  HTML, CSS ๋“ฑ์˜ ๋งˆํฌ์—… ์š”์†Œ๋ฅผ ์ •์˜ํ•˜๋Š” ์†์„ฑ
โ€ข
๋ทฐ์˜ ๋ฐ์ดํ„ฐ ๋ฐ ๊ธฐํƒ€ ์†์„ฑ๋“ค๋„ ํ•จ๊ป˜ ํ™”๋ฉด์— ๊ทธ๋ฆด ์ˆ˜ ์žˆ์Œ
methods
โ€ข
ํ™”๋ฉด ๋กœ์ง ์ œ์–ด์™€ ๊ด€๊ณ„๋œ method๋ฅผ ์ •์˜ํ•˜๋Š” ์†์„ฑ
โ€ข
๋งˆ์šฐ์Šค ํด๋ฆญ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ์™€ ๊ฐ™์ด ํ™”๋ฉด์˜ ์ „๋ฐ˜์ ์ธ ์ด๋ฒคํŠธ์™€ ํ™”๋ฉด ๋™์ž‘๊ณผ ๊ด€๋ จ๋œ ๋กœ์ง์„ ์ถ”๊ฐ€
created
โ€ข
๋ทฐ ์ธ์Šคํ„ด์Šค๊ฐ€ ์ƒ์„ฑ๋˜์ž ๋งˆ์ž ์‹คํ–‰ํ•  ๋กœ์ง์„ ์ •์˜

Vue instance์˜ ์œ ํšจ ๋ฒ”์œ„

โ€ข
Vue Instance๋ฅผ ์ƒ์„ฑํ•˜๋ฉด HTML์˜ ํŠน์ • ๋ฒ”์œ„ ์•ˆ์—์„œ๋งŒ ์˜ต์…˜ ์†์„ฑ๋“ค์ด ์ ์šฉ
โ€ข
el ์†์„ฑ๊ณผ ๋ฐ€์ ‘ํ•œ ๊ด€๊ณ„๊ฐ€ ์žˆ๋‹ค.

Vue instance Life Cycle

โ€ข
Life Cycle์€ ํฌ๊ฒŒ ๋‚˜๋ˆ„๋ฉด Instance์˜ ์ƒ์„ฑ, ์ƒ์„ฑ๋œ Instance๋ฅผ ํ™”๋ฉด์— ๋ถ€์ฐฉ, ํ™”๋ฉด์— ๋ถ€์ฐฉ๋œ Instance์˜ ๋‚ด์šฉ์ด ๊ฐฑ์‹ , Instance๊ฐ€ ์ œ๊ฑฐ๋˜๋Š” ์†Œ๋ฉธ์˜ 4๋‹จ๊ณ„๋กœ ๋‚˜๋‰œ๋‹ค.

Life Cycle Hooks

beforeCreate
โ€ข
Vue Instance๊ฐ€ ์ƒ์„ฑ๋˜๊ณ  ๊ฐ ์ •๋ณด์˜ ์„ค์ • ์ „์— ํ˜ธ์ถœ.
โ€ข
DOM๊ณผ ๊ฐ™์€ ํ™”๋ฉด์š”์†Œ์— ์ ‘๊ทผ ๋ถˆ๊ฐ€
created
โ€ข
Vue Instance๊ฐ€ ์ƒ์„ฑ๋œ ํ›„ ๋ฐ์ดํ„ฐ๋“ค์˜ ์„ค์ •์ด ์™„๋ฃŒ๋œ ํ›„ ํ˜ธ์ถœ
โ€ข
Instance๊ฐ€ ํ™”๋ฉด์— ๋ถ€์ฐฉํ•˜๊ธฐ ์ „์ด๊ธฐ ๋•Œ๋ฌธ์— template ์†์„ฑ์— ์ •์˜๋œ DOM ์š”์†Œ๋Š” ์ ‘๊ทผ ๋ถˆ๊ฐ€
โ€ข
์„œ๋ฒ„์— ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญ(http ํ†ต์‹ )ํ•˜์—ฌ ๋ฐ›์•„์˜ค๋Š” ๋กœ์ง์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์ข‹์Œ
beforeMount
โ€ข
๋งˆ์šดํŠธ๊ฐ€ ์‹œ์ž‘๋˜๊ธฐ ์ „์— ํ˜ธ์ถœ
mounted
โ€ข
์ง€์ •๋œ element์— Vue Instance ๋ฐ์ดํ„ฐ๊ฐ€ ๋งˆ์šดํŠธ ๋œ ํ›„์— ํ˜ธ์ถœ
โ€ข
template ์†์„ฑ์— ์ •์˜ํ•œ ํ™”๋ฉด ์š”์†Œ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์–ด ํ™”๋ฉด ์š”์†Œ๋ฅผ ์ œ์–ดํ•˜๋Š” ๋กœ์ง ์ˆ˜ํ–‰
beforeUpdate
โ€ข
๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ๋  ๋•Œ virtual DOM์ด ๋žœ๋”๋ง, ํŒจ์น˜๋˜๊ธฐ ์ „์— ํ˜ธ์ถœ
updated
โ€ข
Vue์—์„œ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜์–ด DOM์ด ์—…๋ฐ์ดํŠธ ๋œ ์ƒํƒœ
โ€ข
๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ ํ›„ ํ™”๋ฉด ์š”์†Œ ์ œ์–ด์™€ ๊ด€๋ จ๋œ ๋กœ์ง์„ ์ถ”๊ฐ€
beforeDestroy
โ€ข
Vue Instance๊ฐ€ ์ œ๊ฑฐ๋˜๊ธฐ ์ „์— ํ˜ธ์ถœ
destroyed
โ€ข
Vue Instance๊ฐ€ ์ œ๊ฑฐ๋œ ํ›„์— ํ˜ธ์ถœ

๋ณด๊ฐ„๋ฒ•

โ€ข
๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ์˜ ๊ฐ€์žฅ ๊ธฐ๋ณธ ํ˜•ํƒœ๋Š” "Mustache" ๊ตฌ๋ฌธ(์ด์ค‘ ์ค‘๊ด„ํ˜ธ)์„ ์‚ฌ์šฉํ•œ ํ…์ŠคํŠธ ๋ณด๊ฐ„
โ—ฆ
{{ ์†์„ฑ๋ช… }}
โ€ข
v-once ๋””๋ ‰ํ‹ฐ๋ธŒ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ ์‹œ ์—…๋ฐ์ดํŠธ ๋˜์ง€ ์•Š๋Š” ์ผํšŒ์„ฑ ๋ณด๊ฐ„์„ ์ˆ˜ํ–‰
<span> ๋ฉ”์‹œ์ง€ : {{ msg }} </span> <span v-once> ๋‹ค์‹œ๋Š” ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค : {{ msg }} </span>
HTML
๋ณต์‚ฌ

Directive

โ€ข
๋””๋ ‰ํ‹ฐ๋ธŒ๋Š” v-์ ‘๋‘์‚ฌ๊ฐ€ ์žˆ๋Š” ํŠน์ˆ˜ ์†์„ฑ
โ€ข
๋””๋ ‰ํ‹ฐ๋ธŒ ์†์„ฑ ๊ฐ’์€ JavaScript ํ‘œํ˜„์‹์ด ๋œ๋‹ค. (v-for๋Š” ์˜ˆ์™ธ)
โ€ข
๋””๋ ‰ํ‹ฐ๋ธŒ์˜ ์—ญํ• ์€ ํ‘œํ˜„์‹์˜ ๊ฐ’์ด ๋ณ€๊ฒฝ๋  ๋•Œ ์‚ฌ์ด๋“œ ์ดํŽ™ํŠธ๋ฅผ ๋ฐ˜์‘์ ์œผ๋กœ DOM์— ์ ์šฉ

v-model

โ€ข
์–‘๋ฐฉํ–ฅ ๋ฐ”์ธ๋”ฉ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•ด์„œ ์‚ฌ์šฉ (form์˜ input, textarea)
โ€ข
view ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€๊ฒฝ์‹œํ‚ค๋ฉด model์—๋„ ์ ์šฉ
<div id = "app"> <input type="text" v-model="message"/><br/> ์ž…๋ ฅ ๋ฉ”์„ธ์ง€ : {{message}} </div>
HTML
๋ณต์‚ฌ

v-bind

โ€ข
์—˜๋ฆฌ๋จผํŠธ์˜ ์†์„ฑ๊ณผ ๋ฐ”์ธ๋”ฉ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•ด์„œ ์‚ฌ์šฉ
โ€ข
v-bind๋Š” ์•ฝ์–ด๋กœ : ๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅ