【技術積累】Vue.js中的核心知識【四】

2023-07-23 06:00:20

Vue的生命週期

Vue中的生命週期是指元件從建立到銷燬的整個過程中,會觸發一系列的勾點函數

Vue2中的生命週期

Vue2中的生命週期勾點函數是在元件的不同階段執行的特定函數。這些勾點函數允許開發者在元件的不同生命週期階段執行自定義的邏輯。

Vue2中的生命週期勾點函數可以分為8個階段,按照執行順序依次是:

  1. beforeCreate:在範例初始化之後,資料觀測和事件設定之前被呼叫。在這個階段,元件的資料和方法還未初始化,無法存取到元件範例的屬性和方法。

  2. created:在範例建立完成後被呼叫。在這個階段,元件的資料和方法已經初始化完成,可以存取到元件範例的屬性和方法。但是此時元件還未掛載到DOM上。

  3. beforeMount:在元件掛載到DOM之前被呼叫。在這個階段,元件已經完成了模板的編譯,但是還未將元件的模板渲染到真實的DOM中。

  4. mounted:在元件掛載到DOM之後被呼叫。在這個階段,元件的模板已經被渲染到真實的DOM中,可以進行DOM操作和存取DOM元素。

  5. beforeUpdate:在元件更新之前被呼叫。在這個階段,元件的資料發生了變化,但是DOM尚未更新。可以在這個階段進行資料的修改和操作。

  6. updated:在元件更新之後被呼叫。在這個階段,元件的資料已經更新完成,DOM也已經更新。可以進行DOM操作和存取DOM元素。

  7. beforeDestroy:在元件銷燬之前被呼叫。在這個階段,元件範例仍然可用,可以進行一些清理工作,如清除定時器、取消訂閱等。

  8. destroyed:在元件銷燬之後被呼叫。在這個階段,元件範例已經被銷燬,無法再存取到元件範例的屬性和方法。

除了這些常用的生命週期勾點函數外,Vue2還提供了一些其他的勾點函數,如activated和deactivated,用於處理元件在keep-alive元件中的快取和啟用狀態的切換。

通過在這些生命週期勾點函數中編寫邏輯,開發者可以在元件的不同階段執行自定義的操作,如初始化資料、傳送請求、訂閱事件、操作DOM等。這些生命週期勾點函數的使用可以幫助開發者更好地控制元件的行為和互動。

beforeCreate

在Vue2中,beforeCreate是一個生命週期勾點函數,它在範例被建立之初被呼叫。在這個階段,範例的資料觀測和事件機制都尚未初始化,因此在beforeCreate中無法存取到data、computed、methods等範例屬性和方法。

下面是一個案例來說明beforeCreate的使用:

<template>
  <div>
    <h1>{{ message }}</h1>
  </div>
</template>

<script>
export default {
  beforeCreate() {
    console.log("beforeCreate hook");
    this.message = "Hello Vue!";
  },
  created() {
    console.log("created hook");
  },
  data() {
    return {
      message: ""
    };
  }
};
</script>

<style scoped>
h1 {
  color: blue;
}
</style>

在上面的程式碼中,我們定義了一個Vue元件,其中使用了beforeCreate勾點函數。在beforeCreate中,我們列印了一條訊息並給message屬性賦值。然後在模板中使用了message屬性來顯示文字。

當我們執行這個元件時,控制檯會輸出"beforeCreate hook",然後頁面上會顯示"Hello Vue!"。

解釋程式碼:

- 在beforeCreate勾點函數中,我們可以執行一些初始化的操作,但是此時範例的資料和方法還沒有被初始化,因此無法存取data、computed、methods等屬性和方法。

- 在created勾點函數中,範例的資料和方法已經被初始化,可以存取data、computed、methods等屬性和方法。

需要注意的是,beforeCreate勾點函數是在範例被建立之前被呼叫的,因此在這個階段無法存取到範例的DOM元素。如果需要操作DOM元素,可以在mounted勾點函數中進行操作。

created函數

在Vue2中,created是一個生命週期勾點函數,它在範例被建立之後被呼叫。在這個階段,範例的資料觀測和事件機制都已經初始化完成,可以存取到data、computed、methods等範例屬性和方法。

下面是一個案例來說明created的使用:

<template>
  <div>
    <h1>{{ message }}</h1>
  </div>
</template>

<script>
export default {
  created() {
    console.log("created hook");
    this.message = "Hello Vue!";
  },
  data() {
    return {
      message: ""
    };
  }
};
</script>

<style scoped>
h1 {
  color: blue;
}
</style>

在上面的程式碼中,我們定義了一個Vue元件,其中使用了created勾點函數。在created中,我們列印了一條訊息並給message屬性賦值。然後在模板中使用了message屬性來顯示文字。

當我們執行這個元件時,控制檯會輸出"created hook",然後頁面上會顯示"Hello Vue!"。

解釋程式碼:
- 在created勾點函數中,範例的資料和方法已經被初始化,可以存取data、computed、methods等屬性和方法。
- 在created勾點函數中,我們可以執行一些初始化的操作,例如傳送網路請求、訂閱事件等。
- 在created勾點函數中,我們可以對範例的屬性進行修改和操作,例如給message屬性賦值。

需要注意的是,created勾點函數是在範例被建立之後被呼叫的,因此在這個階段可以存取到範例的DOM元素。如果需要操作DOM元素,可以在mounted勾點函數中進行操作。

beforeMount

在Vue2中,beforeMount是一個生命週期勾點函數,它在範例被掛載到DOM之前被呼叫。在這個階段,模板已經編譯完成,但是尚未將範例掛載到DOM上。

下面是一個案例來說明beforeMount的使用:

<template>
  <div>
    <h1>{{ message }}</h1>
  </div>
</template>

<script>
export default {
  beforeMount() {
    console.log("beforeMount hook");
    this.message = "Hello Vue!";
  },
  mounted() {
    console.log("mounted hook");
  },
  data() {
    return {
      message: ""
    };
  }
};
</script>

<style scoped>
h1 {
  color: blue;
}
</style>

在上面的程式碼中,我們定義了一個Vue元件,其中使用了beforeMount勾點函數。在beforeMount中,我們列印了一條訊息並給message屬性賦值。然後在模板中使用了message屬性來顯示文字。

當我們執行這個元件時,控制檯會輸出"beforeMount hook",然後頁面上會顯示"Hello Vue!"。

解釋程式碼:
- 在beforeMount勾點函數中,模板已經編譯完成,但是尚未將範例掛載到DOM上,因此無法存取到範例的DOM元素。
- 在beforeMount勾點函數中,我們可以對範例的屬性進行修改和操作,例如給message屬性賦值。
- 在mounted勾點函數中,範例已經被掛載到DOM上,可以存取到範例的DOM元素。

需要注意的是,beforeMount勾點函數是在範例被掛載到DOM之前被呼叫的,因此在這個階段無法存取到範例的DOM元素。如果需要操作DOM元素,可以在mounted勾點函數中進行操作。

mounted

在Vue2中,mounted是一個生命週期勾點函數,它在範例被掛載到DOM之後被呼叫。在這個階段,範例已經被掛載到DOM上,可以存取到範例的DOM元素。

下面是一個案例來說明mounted的使用:

<template>
  <div>
    <h1>{{ message }}</h1>
  </div>
</template>

<script>
export default {
  mounted() {
    console.log("mounted hook");
    this.message = "Hello Vue!";
  },
  data() {
    return {
      message: ""
    };
  }
};
</script>

<style scoped>
h1 {
  color: blue;
}
</style>

在上面的程式碼中,我們定義了一個Vue元件,其中使用了mounted勾點函數。在mounted中,我們列印了一條訊息並給message屬性賦值。然後在模板中使用了message屬性來顯示文字。

當我們執行這個元件時,控制檯會輸出"mounted hook",然後頁面上會顯示"Hello Vue!"。

解釋程式碼:
- 在mounted勾點函數中,範例已經被掛載到DOM上,可以存取到範例的DOM元素。
- 在mounted勾點函數中,我們可以執行一些需要操作DOM元素的操作,例如獲取DOM元素的尺寸、繫結事件等。
- 在mounted勾點函數中,我們可以對範例的屬性進行修改和操作,例如給message屬性賦值。

需要注意的是,mounted勾點函數是在範例被掛載到DOM之後被呼叫的,因此在這個階段可以存取到範例的DOM元素。如果需要在範例被掛載到DOM之前執行一些操作,可以使用beforeMount勾點函數。

beforeUpdate

在Vue2中,beforeUpdate是一個生命週期勾點函數,它在資料更新之前被呼叫。在這個階段,範例的資料已經發生了改變,但是DOM尚未更新。

下面是一個案例來說明beforeUpdate的使用:

<template>
  <div>
    <h1>{{ message }}</h1>
    <button @click="updateMessage">Update Message</button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      message: "Hello Vue!"
    };
  },
  beforeUpdate() {
    console.log("beforeUpdate hook");
  },
  methods: {
    updateMessage() {
      this.message = "Updated Message";
    }
  }
};
</script>

<style scoped>
h1 {
  color: blue;
}
</style>

在上面的程式碼中,我們定義了一個Vue元件,其中使用了beforeUpdate勾點函數。在beforeUpdate中,我們列印了一條訊息。我們還定義了一個按鈕,當點選按鈕時,會更新message的值。

當我們執行這個元件時,當點選按鈕時,控制檯會輸出"beforeUpdate hook",然後頁面上會顯示"Updated Message"。

解釋程式碼:
- 在beforeUpdate勾點函數中,範例的資料已經發生了改變,但是DOM尚未更新。
- 在beforeUpdate勾點函數中,我們可以執行一些在資料更新之前需要進行的操作,例如傳送網路請求、更新其他資料等。

需要注意的是,beforeUpdate勾點函數是在資料更新之前被呼叫的,因此在這個階段無法存取到更新後的DOM。如果需要在資料更新之後執行一些操作,可以使用updated勾點函數。

updated

在Vue2中,updated是一個生命週期勾點函數,它在資料更新之後被呼叫。在這個階段,範例的資料已經發生了改變,並且DOM也已經更新完成。

下面是一個案例來說明updated的使用:

<template>
  <div>
    <h1>{{ message }}</h1>
    <button @click="updateMessage">Update Message</button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      message: "Hello Vue!"
    };
  },
  updated() {
    console.log("updated hook");
  },
  methods: {
    updateMessage() {
      this.message = "Updated Message";
    }
  }
};
</script>

<style scoped>
h1 {
  color: blue;
}
</style>

在上面的程式碼中,我們定義了一個Vue元件,其中使用了updated勾點函數。在updated中,我們列印了一條訊息。我們還定義了一個按鈕,當點選按鈕時,會更新message的值。

當我們執行這個元件時,當點選按鈕時,頁面上會顯示"Updated Message",並且控制檯會輸出"updated hook"。

解釋程式碼:
- 在updated勾點函數中,範例的資料已經發生了改變,並且DOM也已經更新完成。
- 在updated勾點函數中,我們可以執行一些在資料更新之後需要進行的操作,例如操作更新後的DOM元素、執行一些額外的邏輯等。

需要注意的是,updated勾點函數是在資料更新之後被呼叫的,因此在這個階段可以存取到更新後的DOM。如果需要在資料更新之前執行一些操作,可以使用beforeUpdate勾點函數。

beforeDestroy

在Vue2中,beforeDestroy是一個生命週期勾點函數,它在範例銷燬之前被呼叫。在這個階段,範例仍然完全可用,可以存取到範例的屬性和方法。

下面是一個案例來說明beforeDestroy的使用:

<template>
  <div>
    <h1>{{ message }}</h1>
    <button @click="destroyComponent">Destroy Component</button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      message: "Hello Vue!"
    };
  },
  beforeDestroy() {
    console.log("beforeDestroy hook");
  },
  methods: {
    destroyComponent() {
      this.$destroy();
    }
  }
};
</script>

<style scoped>
h1 {
  color: blue;
}
</style>

在上面的程式碼中,我們定義了一個Vue元件,其中使用了beforeDestroy勾點函數。在beforeDestroy中,我們列印了一條訊息。我們還定義了一個按鈕,當點選按鈕時,會銷燬元件。

當我們執行這個元件時,當點選按鈕時,控制檯會輸出"beforeDestroy hook",然後元件會被銷燬。

解釋程式碼:
- 在beforeDestroy勾點函數中,範例仍然完全可用,可以存取到範例的屬性和方法。
- 在beforeDestroy勾點函數中,我們可以執行一些在範例銷燬之前需要進行的操作,例如清除定時器、取消訂閱等。

需要注意的是,beforeDestroy勾點函數是在範例銷燬之前被呼叫的,因此在這個階段範例仍然可用。如果需要在範例銷燬之後執行一些操作,可以使用destroyed勾點函數。

destoryed

在Vue2中,destroyed是一個生命週期勾點函數,它在範例銷燬之後被呼叫。在這個階段,範例已經被完全銷燬,無法再存取到範例的屬性和方法。

下面是一個案例來說明destroyed的使用:

<template>
  <div>
    <h1>{{ message }}</h1>
    <button @click="destroyComponent">Destroy Component</button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      message: "Hello Vue!"
    };
  },
  destroyed() {
    console.log("destroyed hook");
  },
  methods: {
    destroyComponent() {
      this.$destroy();
    }
  }
};
</script>

<style scoped>
h1 {
  color: blue;
}
</style>

在上面的程式碼中,我們定義了一個Vue元件,其中使用了destroyed勾點函數。在destroyed中,我們列印了一條訊息。我們還定義了一個按鈕,當點選按鈕時,會銷燬元件。

當我們執行這個元件時,當點選按鈕時,元件會被銷燬,控制檯會輸出"destroyed hook"。

解釋程式碼:
- 在destroyed勾點函數中,範例已經被完全銷燬,無法再存取到範例的屬性和方法。
- 在destroyed勾點函數中,我們可以執行一些在範例銷燬之後需要進行的操作,例如清除全域性事件監聽器、釋放資源等。

需要注意的是,destroyed勾點函數是在範例銷燬之後被呼叫的,因此在這個階段無法再存取到範例的屬性和方法。如果需要在範例銷燬之前執行一些操作,可以使用beforeDestroy勾點函數。

Vue3中的生命週期

Vue 3的生命週期相對於Vue 2有所改變,主要是為了更好地支援Composition API。以下是Vue 3的生命週期:

  1. setup:在元件範例化之前被呼叫。在這個階段,可以進行元件的初始化工作,包括響應式資料的設定、計算屬性的定義、方法的定義等。

  2. beforeCreate:在元件範例建立之前被呼叫。在這個階段,可以進行一些初始化工作,但是無法存取到響應式資料和元件範例。

  3. created:在元件範例建立完成後被立即呼叫。在這個階段,可以存取到響應式資料和元件範例,可以進行一些資料的初始化操作。

  4. beforeMount:在元件掛載開始之前被呼叫。在這個階段,模板已經編譯完成,但是還未掛載到頁面上。

  5. mounted:在元件掛載完成後被呼叫。在這個階段,元件已經被掛載到頁面上,可以進行DOM操作。

  6. beforeUpdate:在元件更新之前被呼叫。在這個階段,可以進行一些資料的修改操作。

  7. updated:在元件更新之後被呼叫。在這個階段,可以執行依賴於DOM的操作。

  8. beforeUnmount:在元件解除安裝之前被呼叫。在這個階段,元件仍然可用,可以進行一些清理工作。

  9. unmounted:在元件解除安裝之後被呼叫。在這個階段,元件的指令和事件監聽器已經被移除,元件範例被銷燬。

通過這些生命週期勾點函數,我們可以在不同的階段執行相應的操作,比如在setup階段進行元件的初始化,mounted階段進行DOM操作,beforeUnmount階段進行資源清理等。同時,Vue 3還引入了更靈活的Composition API,可以更好地組織和複用元件邏輯。

beforeMount

在Vue3中,`beforeMount`是一個選項式API的生命週期函數,它在掛載開始之前被呼叫。在`beforeMount`階段,模板編譯已完成,但是尚未將模板渲染到DOM中。

下面是一個使用`beforeMount`的案例,通過在`beforeMount`中修改DOM元素的樣式來展示其使用方法:

<template>
  <div>
    <p ref="message">{{ message }}</p>
  </div>
</template>

<script setup>
import { onBeforeMount, ref } from 'vue';

const message = ref('Hello, Vue3!');

onBeforeMount(() => {
  console.log('beforeMount hook');
  const messageElement = document.querySelector('#message');
  messageElement.style.color = 'red';
});
</script>

<style scoped>
/* 樣式 */
</style>

在上述程式碼中,我們首先匯入了`onBeforeMount`和`ref`函數。然後,在`onBeforeMount`函數中,我們列印了一條訊息,並通過`document.querySelector`方法獲取到`<p>`元素的參照,然後修改其樣式為紅色。

當元件掛載開始之前,`beforeMount`函數會被呼叫,控制檯會輸出'beforeMount hook',同時`<p>`元素的文字顏色會變為紅色。

需要注意的是,`beforeMount`函數中可以存取到元件範例的資料和方法,因為此時元件範例已經建立完成。同時,`beforeMount`函數中可以直接操作DOM元素,但是建議使用Vue的響應式資料來管理DOM的狀態,以便更好地利用Vue的特性。

總結:`beforeMount`函數在掛載開始之前被呼叫,可以用於在DOM渲染之前進行一些操作,例如修改DOM元素的樣式、新增事件監聽器等。

mounted

在Vue3中,`mounted`是一個選項式API的生命週期函數,它在元件掛載到DOM之後呼叫。在`mounted`階段,元件已經被渲染到DOM中,可以進行DOM操作和存取DOM元素。

下面是一個使用`mounted`的案例,通過在`mounted`中新增一個事件監聽器來展示其使用方法:

<template>
  <div>
    <button ref="button">Click me</button>
  </div>
</template>

<script setup>
import { onMounted, ref } from 'vue';

onMounted(() => {
  console.log('mounted hook');
  const buttonElement = document.querySelector('#button');
  buttonElement.addEventListener('click', handleClick);
});

function handleClick() {
  console.log('Button clicked');
}
</script>

<style scoped>
/* 樣式 */
</style>

在上述程式碼中,我們使用`onMounted`函數來註冊一個回撥函數,在元件掛載到DOM之後呼叫。在回撥函數中,我們列印了一條訊息,並通過`document.querySelector`方法獲取到`<button>`元素的參照,然後新增了一個點選事件的監聽器。

當元件掛載到DOM之後,`mounted`函數會被呼叫,控制檯會輸出'mounted hook'。同時,當點選按鈕時,控制檯會輸出'Button clicked'。

需要注意的是,`mounted`函數中可以存取到元件範例的資料和方法,因為此時元件已經被渲染到DOM中。同時,`mounted`函數中可以進行一些需要存取DOM元素的操作,例如新增事件監聽器、初始化第三方庫等。

總結:`mounted`函數在元件掛載到DOM之後呼叫,可以用於進行一些需要存取DOM元素的操作,例如新增事件監聽器、初始化第三方庫等。

beforeUpdate

在Vue3中,`beforeUpdate`是一個選項式API的生命週期函數,它在元件更新之前呼叫。在`beforeUpdate`階段,元件的資料已經發生了改變,但是DOM尚未更新。

下面是一個使用`beforeUpdate`的案例,通過在`beforeUpdate`中列印更新前後的資料來展示其使用方法:

<template>
  <div>
    <p>{{ message }}</p>
    <button @click="updateMessage">Update Message</button>
  </div>
</template>

<script setup>
import { onBeforeUpdate, ref } from 'vue';

const message = ref('Hello, Vue3!');

onBeforeUpdate(() => {
  console.log('beforeUpdate hook');
  console.log('Previous message:', message.value);
});

function updateMessage() {
  message.value = 'Updated message';
}
</script>

<style scoped>
/* 樣式 */
</style>

在上述程式碼中,我們使用`beforeUpdate`函數來註冊一個回撥函數,在元件更新之前呼叫。在回撥函數中,我們列印了一條訊息,並輸出了更新前的`message`的值。

在模板中,我們展示了`message`的值,並提供了一個按鈕,點選按鈕會呼叫`updateMessage`函數來更新`message`的值。

當點選按鈕時,`updateMessage`函數會被呼叫,`message`的值會發生改變。然後,`beforeUpdate`函數會被呼叫,控制檯會輸出'beforeUpdate hook'和'Previous message: Hello, Vue3!',即更新前的`message`的值。

需要注意的是,`beforeUpdate`函數中可以存取到元件範例的資料和方法,因為此時元件的資料已經發生了改變。同時,`beforeUpdate`函數中可以進行一些在元件更新之前的操作,例如獲取更新前的資料、做一些準備工作等。

總結:`beforeUpdate`函數在元件更新之前呼叫,可以用於進行一些在元件更新之前的操作,例如獲取更新前的資料、做一些準備工作等。

updated

在Vue3中,`updated`是一個選項式API的生命週期函數,它在元件更新完成後呼叫。在`updated`階段,元件的資料已經發生了改變,並且DOM也已經更新完畢。

下面是一個使用`updated`的案例,通過在`updated`中列印更新後的資料來展示其使用方法:

<template>
  <div>
    <p>{{ message }}</p>
    <button @click="updateMessage">Update Message</button>
  </div>
</template>

<script setup>
import { onUpdated, ref } from 'vue';

const message = ref('Hello, Vue3!');

onUpdated(() => {
  console.log('updated hook');
  console.log('Updated message:', message.value);
});

function updateMessage() {
  message.value = 'Updated message';
}
</script>

<style scoped>
/* 樣式 */
</style>

在上述程式碼中,我們使用`onUpdated`函數來註冊一個回撥函數,在元件更新完成後呼叫。在回撥函數中,我們列印了一條訊息,並輸出了更新後的`message`的值。

在模板中,我們展示了`message`的值,並提供了一個按鈕,點選按鈕會呼叫`updateMessage`函數來更新`message`的值。

當點選按鈕時,`updateMessage`函數會被呼叫,`message`的值會發生改變。然後,`onUpdated`函數會被呼叫,控制檯會輸出'updated hook'和'Updated message: Updated message',即更新後的`message`的值。

需要注意的是,`onUpdated`函數中可以存取到元件範例的資料和方法,因為此時元件的資料已經發生了改變,並且DOM也已經更新完畢。同時,`onUpdated`函數中可以進行一些在元件更新完成後的操作,例如獲取更新後的資料、執行一些額外的邏輯等。

總結:`updated`函數在元件更新完成後呼叫,可以用於進行一些在元件更新完成後的操作,例如獲取更新後的資料、執行一些額外的邏輯等。

beforeUnmount

在Vue3中,beforeUnmount是一個選項式API的生命週期函數,它在元件解除安裝之前呼叫。在beforeUnmount階段,元件即將從DOM中被移除。

下面是一個使用`beforeUnmount`的案例,通過在`beforeUnmount`中執行一些清理操作來展示其使用方法:

<template>
  <div>
    <p>{{ message }}</p>
    <button @click="unmountComponent">Unmount Component</button>
  </div>
</template>

<script setup>
import { onBeforeUnmount, ref } from 'vue';

const message = ref('Hello, Vue3!');

onBeforeUnmount(() => {
  console.log('onBeforeUnmount hook');
  // 執行一些清理操作
});

function unmountComponent() {
  // 解除安裝元件
}
</script>

<style scoped>
/* 樣式 */
</style>

在上述程式碼中,我們使用`onBeforeUnmount`函數來註冊一個回撥函數,在元件解除安裝之前呼叫。在回撥函數中,我們列印了一條訊息,並可以執行一些清理操作,例如取消訂閱、清除定時器等。

在模板中,我們展示了`message`的值,並提供了一個按鈕,點選按鈕會呼叫`unmountComponent`函數來解除安裝元件。

當點選按鈕時,`unmountComponent`函數會被呼叫,元件會被解除安裝。然後,`onBeforeUnmount`函數會被呼叫,控制檯會輸出'onBeforeUnmount hook',即元件即將被解除安裝。

需要注意的是,`onBeforeUnmount`函數中可以存取到元件範例的資料和方法,因為此時元件即將被解除安裝。同時,`onBeforeUnmount`函數中可以進行一些在元件解除安裝之前的清理操作,例如取消訂閱、清除定時器等。

總結:`onBeforeUnmount`函數在元件解除安裝之前呼叫,可以用於進行一些在元件解除安裝之前的清理操作,例如取消訂閱、清除定時器等。

unmounted

在Vue3中,`unmounted`是一個選項式API的生命週期函數,它在元件解除安裝完成後呼叫。在`unmounted`階段,元件已經從DOM中被移除。

下面是一個使用`unmounted`的案例,通過在`unmounted`中執行一些清理操作來展示其使用方法:

<template>
  <div>
    <p>{{ message }}</p>
    <button @click="unmountComponent">Unmount Component</button>
  </div>
</template>

<script setup>
import { onUnmounted, ref } from 'vue';

const message = ref('Hello, Vue3!');

onUnmounted(() => {
  console.log('unmounted hook');
  // 執行一些清理操作
});

function unmountComponent() {
  // 解除安裝元件
}
</script>

<style scoped>
/* 樣式 */
</style>

在上述程式碼中,我們使用`onUnmounted`函數來註冊一個回撥函數,在元件解除安裝完成後呼叫。在回撥函數中,我們列印了一條訊息,並可以執行一些清理操作,例如取消訂閱、清除定時器等。

在模板中,我們展示了`message`的值,並提供了一個按鈕,點選按鈕會呼叫`unmountComponent`函數來解除安裝元件。

當點選按鈕時,`unmountComponent`函數會被呼叫,元件會被解除安裝。然後,`onUnmounted`函數會被呼叫,控制檯會輸出'unmounted hook',即元件已經被解除安裝。

需要注意的是,`onUnmounted`函數中可以存取到元件範例的資料和方法,因為此時元件已經被解除安裝。同時,`onUnmounted`函數中可以進行一些在元件解除安裝完成後的清理操作,例如取消訂閱、清除定時器等。

總結:`unmounted`函數在元件解除安裝完成後呼叫,可以用於進行一些在元件解除安裝完成後的清理操作,例如取消訂閱、清除定時器等。