각각의 vue 컴포넌트 인스턴스는 생성되고 소멸될 때 사전에 정의된 몇 단계의 과정을 거치게 되는데 이를 라이프사이클이라고 한다
setup()
함수 내에서 동기적으로 호출Creation(생성)
→ Mounting(장착)
→ Updating(수정)
→ Destruction(소멸)
beforeCreate
와 created
라이프사이클 훅은 Options API에서 사용하는 라이프사이클 훅으로 Vue3 Composition API를 활용하여 개발을 진행할 때는 setup()
함수로 대체<template>
<div class="container py-4">
<input ref="inputRef" type="text" value="hello" />
<hr />
<button @click="visible = !visible">toggle</button>
<LifeCycleChild v-if="visible"></LifeCycleChild>
<p id="message">{{ message }}</p>
</div>
</template>
<script>
import { onBeforeMount, onMounted, onBeforeUpdate, onUpdated, ref } from "vue";
import LifeCycleChild from "./LifeCycleChild.vue";
export default {
components: {
LifeCycleChild,
},
setup() {
// console.log("setup");
const inputRef = ref(null);
const message = ref("");
const visible = ref(false);
// onBeforeMount(() => {
// console.log("onBeforeMounted");
// });
// onMounted(() => {
// console.log("onMounted", inputRef.value.value);
// });
// onBeforeUpdate(() => {
// console.log("onBeforeUpdate ", message.value);
// console.log("DOM : ", document.querySelector("#message").textContent);
// });
// onUpdated(() => {
// console.log("onUpdated ", message.value);
// console.log("DOM : ", document.querySelector("#message").textContent);
// });
return { inputRef, message, visible };
},
// data() {
// return {
// dataMessage: "data message",
// };
// },
// beforeCreate() {
// //컴포넌트가 초기화 될 때 실행되는 훅
// console.log("beforeCreated", this.dataMessage);
// },
// created() {
// console.log("Created", this.dataMessage);
// },
};
</script>
<style lang="scss" scoped></style>
<template>
<div class="card">
<div class="card-body">Lifecycle Child</div>
</div>
</template>
<script>
import { onBeforeMount, onBeforeUnmount, onMounted, onUnmounted } from "vue";
export default {
setup() {
// console.log("Child setup");
onBeforeMount(() => {
console.log("Child onBeforeMount");
});
onMounted(() => {
console.log("Child onMounted");
});
onBeforeUnmount(() => {
console.log("Child onBeforeUnmount");
});
onUnmounted(() => {
console.log("Child onUnmounted");
});
return {};
},
};
</script>
<style lang="scss" scoped></style>