mounted
Hook 為 Vue 已經準備好 HTML 的 DOM Nodes,可以開始處理 HTML 時觸發,可在此 Hooks 初始化 State,如讀取 JSON 檔寫入 State,讀取 API 寫入 State … 等。
Version
Vue 3.4
JSON 檔
assets/data.json
[
{ "id": 0, "name": "Apple" },
{ "id": 1, "name": "Google" },
{ "id": 2, "name": "Microsoft" }
]
- 將 data 儲存在
.json
並放在assets
目錄下
Composition API
<template>
<select v-model="selected">
<option disabled value="">Please select one</option>
<option v-for="item in options" :value="item.id" :key="item.id">
{{ item.name }}
</option>
</select>
<div>{{ selected }}</div>
</template>
<script setup>
import { ref, onMounted } from 'vue'
import source from './assets/data.json'
let selected = ref('')
let options = ref([])
onMounted(() => (options.value = source))
</script>
Line 13
import source from './assets/data.json'
- import:從
assets
目錄 import 進 JSON 檔
Line 16
let options = ref([])
ref()
:宣告options
state
Line 18
onMounted(() => (options.value = source))
onMounted()
:在mounted
hook 將 JSON 檔寫入options
state
Options API
<template>
<select v-model="selected">
<option disabled value="">Please select one</option>
<option v-for="item in options" :value="item.id" :key="item.id">
{{ item.name }}
</option>
</select>
<div>{{ selected }}</div>
</template>
<script>
import source from './assets/data.json'
export default {
data: () => ({
selected: '',
options: []
}),
mounted() {
this.options = source
}
}
</script>
- 最後附上相同功能的 Options API 供參考
- State 宣告在
data()
function onMounted()
function 改成mounted()
method
Conclusion
- 因為在
mounted
hook 時 HTML 的 DOM Node 已經準備好,此時改變 state,Vue 可接著改變 HTML,其他更早的 hook 都還沒有 DOM Node 可用