# Lifecycle API Vue 3
๋ผ์ดํ์ฌ์ดํด(Lifecycle) API๋ ์ปดํฌ์ง์ (Composition API)์์ ์ฌ์ฉ๋ ์ธ์คํด์ค ๋ผ์ดํ์ฌ์ดํด ํ ์ ์๋ฏธํฉ๋๋ค. ์ด ํ์ด์ง์์๋ ์ปดํฌ์ง์ ์์ ์ธ์คํด์ค ๋ผ์ดํ์ฌ์ดํด ํ ์ ์ ์ํ๋ ๋ฐฉ๋ฒ์ ์์๋ณด๊ฒ ์ต๋๋ค.
์ฉ์ด์ ๋ฆฌ
- ์ธ์คํด์ค ๋ผ์ดํ์ฌ์ดํด ํ
: ์ปดํฌ๋ํธ ์๋ช
์ฃผ๊ธฐ์ ๋ฐ๋ผ ํน์ ๋ก์ง์ ์คํํ ์ ์๋ ์์ฑ ํจ์.
created()
,beforeMount()
๋ฑ - ๋ผ์ดํ์ฌ์ดํด API : ์ปดํฌ์ง์ ์คํ์ผ๋ก ์์ฑ๋ ์ธ์คํด์ค ๋ผ์ดํ์ฌ์ดํด ํ
# ์ธ์คํด์ค ๋ผ์ดํ์ฌ์ดํด์ด๋? Vue 2Vue 3
์ธ์คํด์ค ๋ผ์ดํ์ฌ์ดํด์ด๋ ๋ทฐ ์ธ์คํด์ค(์ปดํฌ๋ํธ) ์๋ช ์ฃผ๊ธฐ๋ฅผ ์๋ฏธํฉ๋๋ค. ์ปดํฌ๋ํธ๊ฐ ์์ฑ๋๊ณ ์๋ฉธ๋๊ธฐ๊น์ง์ ๊ณผ์ ์ ์๋ฏธํ๋๋ฐ์. ์ปดํฌ๋ํธ๊ฐ ์์ฑ๋์์ ๋ ์ฌ์ฉ์์ ์ ๋ ฅ ์์ด๋ ๋ฐ์ดํฐ๋ฅผ ํ์ํ ์ ์๋ ๋ฐฉ๋ฒ์ ๋๋ค.
์ธ์คํด์ค ๋ผ์ดํ์ฌ์ดํด์ created, beforeMount, mounted ๋ฑ์ ๋ผ์ดํ์ฌ์ดํด ํ ์ผ๋ก ์ถ๊ฐ ๋ก์ง์ ์คํํ ์ ์์ต๋๋ค. ์๋ ์์ ์ฝ๋๋ฅผ ๋ณด๊ฒ ์ต๋๋ค.
<template>
<h1>์ธ์คํด์ค ๋ผ์ดํ์ฌ์ดํด ํ
</h1>
</template>
<script>
export default {
data() {
return {
message: 'Hello'
}
},
created() {
console.log(this.message);
}
}
</script>
์ ์ฝ๋๋ ์ปดํฌ๋ํธ๊ฐ ์์ฑ๋์๋ง์ message
๋ฐ์ดํฐ๋ฅผ ์ฝ์ ์ฐฝ์ ์ถ๋ ฅํ๋ ์ฝ๋์
๋๋ค. created
๋ผ๋ ๋ผ์ดํ์ฌ์ดํด ํ
์ ์ฌ์ฉํ์ต๋๋ค. ์ด์ฒ๋ผ ๋จ์ํ ๋ฉ์์ง ์ถ๋ ฅ ์ด์ธ์๋ ์๋ฒ์์ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์ค๊ฑฐ๋ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฑ์ ์
์
ํ๋ ๋ฑ์ ์ถ๊ฐ ๋ก์ง์ ๋ผ์ดํ์ฌ์ดํด ํ
์ ์ ์ํ ์ ์์ต๋๋ค.
# Lifecycle API ์๊ฐ Vue 3
๋ผ์ดํ์ฌ์ดํด API๋ ์ปดํฌ์ง์ ์คํ์ผ๋ก ์์ฑ๋ ๋ผ์ดํ์ฌ์ดํด ํ ์ ์๋ฏธํฉ๋๋ค. ๊ธฐ์กด ๋ผ์ดํ์ฌ์ดํด ํ ์ด ์ปดํฌ๋ํธ ์์์ ๋ค์๊ณผ ๊ฐ์ด ์ธ์คํด์ค ์ต์ ์์ฑ ํํ๋ก ์์ฑ๋๊ฑฐ์ ๋ฐํด ๋ณ๋์ API๋ฅผ ์ํฌํธํด์ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
<script>
export default {
// ์ธ์คํด์ค ์ต์
์์ฑ ํํ๋ก ์์ฑ๋ ๋ผ์ดํ์ฌ์ดํด ํ
created() {},
beforeMount() {},
mounted() {},
destroyed() {}
}
</script>
์ด๋ฒ์ ๋ผ์ดํ์ฌ์ดํด API์ ์ฝ๋๋ฅผ ๋ณด๊ฒ ์ต๋๋ค.
<script>
import { ref, onMounted } from 'vue';
export default {
setup() {
// data
const message = ref('Hello');
// lifecycle API
onMounted(() => {
console.log(message.value);
});
}
}
</script>
์ ์ฝ๋๋ onMounted
๋ผ๋ ๋ผ์ดํ์ฌ์ดํด API๋ฅผ ์ด์ฉํ์ฌ ์ปดํฌ๋ํธ๊ฐ ๋ง์ดํธ(๋ถ์ฐฉ)๋์์ ๋ ๋ธ๋ผ์ฐ์ ์ฝ์ ์ฐฝ์ message
๋ฐ์ดํฐ๋ฅผ ์ถ๋ ฅํ๋ ์ฝ๋์
๋๋ค. message
์ ์ด๊ธฐ ๊ฐ์ด Hello๋ก ์ ์ธ๋์๊ธฐ ๋๋ฌธ์ Hello๊ฐ ์ถ๋ ฅ๋ ๊ฒ๋๋ค. ์ด์ฒ๋ผ ๋ผ์ดํ์ฌ์ดํด API๋ setup()
ํจ์ ์์์ onXX
ํํ๋ก API๋ฅผ ์ํฌํธํ์ฌ ์ ์ํฉ๋๋ค.
# ์ธ์คํด์ค ๋ผ์ดํ์ฌ์ดํด ํ ๊ณผ Lifecycle API์ ์ฐจ์ด์
์ธ์คํด์ค ๋ผ์ดํ์ฌ์ดํด ํ
๊ณผ ๋ผ์ดํ์ฌ์ดํด API๋ ์๋ช
์ฃผ๊ธฐ๊ฐ ์ด์ง ๋ค๋ฆ
๋๋ค. ์๋ช
์ฃผ๊ธฐ๊ฐ ๋ค๋ฅด๋ค๋ผ๋ ๋ง์ ์ฌ์ฉํ ์ ์๋ ์์ฑ, API๊ฐ ๋ค๋ฅด๋ค๋ผ๋ ๊ฑธ ์๋ฏธํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์ธ์คํด์ค ๋ผ์ดํ์ฌ์ดํด ํ
์ ์๋์ ๊ฐ์ด created()
์์ฑ์ ์ฌ์ฉํ ์ ์๋ ๋ฐ๋ฉด์ ๋ผ์ดํ์ฌ์ดํด API๋ onCreated()
์ ๊ฐ์ API๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
<script>
export default {
// ์ธ์คํด์ค ๋ผ์ดํ์ฌ์ดํด ํ
created() {}, // O
// ๋ผ์ดํ์ฌ์ดํด API
setup() {
onCreated(() => {}) // X - ์ด API๋ ์กด์ฌํ์ง ์์
}
}
</script>
์์ ๊ฐ์ ์ฐจ์ด๊ฐ ๋ฐ์ํ๋ ์ด์ ๋ setup()
ํจ์์ ์คํ ์์ ๋๋ฌธ์ ๊ทธ๋ ์ต๋๋ค. setup()
ํจ์๊ฐ ์คํ๋๋ ์์ ์ด ๊ธฐ์กด์ beforeCreate()
, created()
๊ฐ ์คํ๋๋ ์์ ๊ณผ ๋น์ทํ๊ธฐ ๋๋ฌธ์ ์๋์ ๊ฐ์ด ์ ์ธํ ๋ด์ฉ๋ค์ ๋ชจ๋ setup()
ํจ์ ๋ด์ ์ ์ธํ๋ฉด ๋ฉ๋๋ค.
<script>
export default {
beforeCreate() {
console.log('API ํธ์ถ ์ ');
},
created() {
axios.get('users/1').then(res => console.log(res));
},
}
</script>
<script>
export default {
setup() {
console.log('API ํธ์ถ ์ ');
axios.get('users/1').then(res => console.log(res));
}
}
</script>
์ด์ฒ๋ผ onBeforeCreate
, onCreate
๊ฐ ์๊ณ ์๋์ ๊ฐ์ด API ์ด๋ฆ์ ๋ณํ๊ฐ ์์ต๋๋ค.
์ธ์คํด์ค ๋ผ์ดํ์ฌ์ดํด ํ | ๋ผ์ดํ์ฌ์ดํด API | ๋น๊ณ |
---|---|---|
beforeCreate | X | ๋์ setup() ์ฌ์ฉ |
created | X | ๋์ setup() ์ฌ์ฉ |
beforeMount | onBeforeMount | |
mounted | onMounted | |
beforeUpdate | onBeforeUpdate | |
updated | onUpdated | |
beforeDestroy | onBeforeUnmount | destory ๋ผ๋ ํํ์ด unmount๋ก ๋ณ๊ฒฝ๋จ |
destroyed | onUnmounted | destory ๋ผ๋ ํํ์ด unmount๋ก ๋ณ๊ฒฝ๋จ |
errorCaptured | onErrorCaptured |
์ ํ๋ฅผ ๋ณด๋ฉด ์ ๋ฐ์ ์ผ๋ก ์ ๊ณต๋๋ API๋ ๋์ผํ์ง๋ง ์๋ 3๊ฐ์ง๊ฐ ๋ฌ๋ผ์ก์ต๋๋ค.
beforeCreate
,created
๋์ ์setup()
์ ์ฌ์ฉonXX
ํํ๋ก ์ด๋ฆ์ด ๋ฐ๋ ์ beforeDestory
,destroyed
๋ฑ destory ๋์ ์onBeforeUnmount
,onUnmounted
๋ฅผ ์ฌ์ฉ
โ Watch API ๐ Props - setup() ๐ โ