1. Vue๋?
Vue๋ Facebook์ React, Google์ Angular์ ๋๋ถ์ด
๋ํ์ ์ธ Single Page Application(SPA) ํ๋ ์์ํฌ ๋ค.
๋ค๋ฅธ ํ๋ ์์ํฌ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋นํด ํ์ต ๊ณก์ ์ด ๋ฎ์
๋๊ตฌ๋ ์ฝ๊ณ ๋น ๋ฅด๊ฒ ๋ฐฐ์ธ ์ ์๋ ํ๋ ์์ํฌ๋ผ๊ณ ํ์ง๋ง
๋ญ... ์ธ์ ๋ง๋ฌผ์ด ๊ทธ๋ ๋ฏ์ด ์ฒ์ ์ ํ๋ฉด ๋๊ตฌ๋ ์ด๋ ต๊ธฐ๋ง๋ จ ใ
2. ๋ฒ์
Vue๋ Evan You ๋ผ๋ ๊ฐ๋ฐ์์ ์ํด 2014๋
๋ฐํ๋์๊ณ , ๋ฐํ๋ ์ดํ๋ก ํ์ฌ๊น์ง ๊พธ์คํ ๋ฆด๋ฆฌ์ฆ ๋๊ณ ์๋ค.
Vue 2.0์ 2016๋
์ Ghost in the Shell ์ด๋ผ๋ ์ฝ๋๋ช
์ผ๋ก, 2.6์ 2019๋
์ Macross ๋ผ๋ ์ฝ๋๋ช
์ผ๋ก,
๊ทธ๋ฆฌ๊ณ ๋๋์ด 3.0์ 2020๋
9์ 19์ผ์ One Piece ๋ผ๋ ์ฝ๋๋ช
์ผ๋ก ๊ณต๊ฐ๋์๋ค.
ํ ์์ ์ ์ต์ ๋ฒ์ ์ 3.2.37 ์ด๋ค.
3. ๊ธฐ์กด ๋ฒ์ ์์ ๋ฌ๋ผ์ง ์
Vue 3๋ ๊ธฐ์กด ๋ฒ์ ๋ณด๋ค ์ฑ๋ฅ์ด ๊ฐ์ ๋์๊ณ ์ฌ๋ฌ๊ฐ์ง ๊ธฐ๋ฅ์ด ์
๋ฐ์ดํธ ๋์๋ค.
๋ง์ ์
๋ฐ์ดํธ๋ค ์ค์ ๊ฐ์ฅ ํต์ฌ์ ์ธ 4๊ฐ์ง๋ง ์ ๋ฆฌํ๋ค ๐
3.1. Compisition API ๊ธฐ๋ณธ ์ง์
์ฒซ ๋ฒ์งธ๋ Composition API๋ฅผ ๊ธฐ๋ณธ์ ์ผ๋ก ์ง์ ํ๋ค๋ ์ ์ด๋ค.
export default {
data ( ) {
return {
username : '' ,
password : ''
}
},
methods : {
login ( ) {
}
},
computed : {
lowerCaseUsername ( ) {
return this .username.toLowerCase()
}
}
}
Vue 2์์๋ Component์ ์ต์
์ Data, Methods, Computed, Watch ๋ก ๊ตฌ๋ถํ๋ค.
๊ฐ ํน์ง์ ๋ฐ๋ผ ๊ตฌ๋ถ๋์ด ์์ด ํ๋ก์ ํธ ์ด๋ฐ์๋ ๋ ์ง๊ด์ ์ผ๋ก ์ธ ์ ์์ง๋ง
ํ๋ก์ ํธ ํฌ๊ธฐ๊ฐ ์ปค์ง์๋ก, ์ฝ๋๋์ด ๋ง์์ง์๋ก ๊ฐ๋
์ฑ์ด ๋จ์ด์ง๋ ๋จ์ ์ด ์์๋ค.
import { reactive } from 'vue' ;
export default {
setup ( ) {
const state = reactive({
username : '' ,
password : '' ,
lowerCaseUsername : computed(() => state.username.toLowerCase()),
})
const login = () => {
}
return {
login,
state,
}
}
}
Composition API๋ ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ฑ์ฅํ์๋ค.
Data, Methods, Computed ๋ฑ์ด ๊ฐ์ ๋ถ์ฐ๋์ด ๋ด๋นํ๋ ๊ธฐ๋ฅ๋ค์ Setup ๋ฉ์๋์ ํ๋๋ก ๋ชจ์ผ๋ ๊ฒ์ด๋ค.
๋ง์ ์์ ์ฝ๋๋ค์ ์๋ก์ ๊ด๋ จ์ฑ ๋ฐ๋ผ ๊ฐ๋ฐ์ ์ค์ค๋ก ๋ฐฐ์นํ์ฌ, ์ฝ๋๋ฅผ ๋ ์ดํดํ๊ธฐ ์ฝ๊ฒ ํ๋ ๊ฒ์ด๋ค.
Vue 2์์๋ Composition ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ์ฉํด์ ๋๊ฐ์ ๊ธฐ๋ฅ์ ํ ์ ์์์ง๋ง
Vue 3์์๋ Composition API๊ฐ ๊ธฐ๋ณธ์ผ๋ก ์ฌ์ฉ๋๋ ์ ์ด ํฐ ์ฐจ์ด์ ์ด๋ค.
3.2. Lifecycle ๋ณํ
๋ ๋ฒ์งธ๋ Lifecycle์ ๋ณํ ์ด๋ค.
export default {
created ( ) {
console .log('created' )
},
mounted ( ) {
console .log('mounted' )
},
}
Vue 2์์๋ Created, Mounted, Updated ๋ฑ์ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ค.
๊ทธ๋ฐ๋ฐ ์ด ๋ฉ์๋๋ค์ด Composition API์ Setup ๋ฉ์๋ ์์ผ๋ก ๋ค์ด๊ฐ๋ฉด์ ๋ช
์นญ ๋ฑ์ด ๋ฐ๋์๋ค.
import { onMounted } from 'vue' ;
export default {
setup ( ) {
onMounted(() => {
console .log('onMounted' )
})
}
}
Created๋ Setup ๋ฉ์๋ ์์์ ์คํํ๋๋ก ๋ฐ๋์๊ณ ,
Mounted๋ onMounted๋ก, Updated๋ onUpdated๋ผ๋ ์ด๋ฆ์ผ๋ก ๋ฐ๋์๋ค.
์์น์ ์ด๋ฆ์ด ์กฐ๊ธ ๋ฐ๋์์ ๋ฟ ๊ธฐ๋ฅ์ ํฐ ์ฐจ์ด ์๋ค๊ณ ๋ณด๋ฉด ๋๋ค.
์ด ์ธ์๋ BeforeUnmount, Unmounted๋ฑ์ ๋ด์ฉ์ด ๋ฐ๋์๋๋ฐ ์์ธํ ๋ด์ฉ์ ๊ฒ์!
3.3. ๋ฉํฐ ๋ฃจํธ ์๋ฆฌ๋จผํธ
์ธ ๋ฒ์งธ๋ ํ
ํ๋ฆฟ์ ์์ฑํ ๋ ๋ฃจํธ ์๋ฆฌ๋จผํธ๋ฅผ ์ฌ๋ฌ๊ฐ ๊ฐ์ง ์ ์๋ค๋ ์ ์ด๋ค.
Vue 2์์๋ ํ
ํ๋ฆฟ ์์ ๋ฃจํธ ์๋ฆฌ๋จผํธ๋ฅผ ํ๋๋ง ๊ฐ์ง ์ ์์๋ค.
ํ์ง๋ง Vue 3๋ถํฐ๋ ํ
ํ๋ฆฟ ์์ ์ฌ๋ฌ๊ฐ์ ๋ฃจํธ ์๋ฆฌ๋จผํธ๋ฅผ ๋ง๋ค ์ ์๋ค.
<template >
<h1 > Title</h1 >
<div > Content</div >
</template >
3.4. IE ์ง์ ์ค๋จ
๋ง์ง๋ง์ผ๋ก ๋ ์ด์ Internet Explorer(IE) ๋ฅผ ์ง์ํ์ง ์๋๋ค ๋ ์ ์ด๋ค.
๊ผญ ์ง์ํด์ผ ํ๋ ์ํฉ์ด๋ผ๋ฉด ์ด์ ๋ฒ์ ์ ์ฌ์ฉํด์ผ ํ๋ค.