각각의 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>