2024-11-28 vue 判斷你使用的是 Vue 根實例 還是 Vue 組件

2024-11-28 vue 判斷你使用的是 Vue 根實例 還是 Vue 組件

在 Vue 中,判斷你使用的是 Vue 根實例 還是 Vue 組件,可以從代碼結構和上下文來辨別。以下是一些清晰的區分方法:


1. Vue 根實例(new Vue()

當你用 new Vue() 創建應用時,就是在定義 Vue 的根實例。這是整個應用的起點,通常會掛載到一個 DOM 元素上(如 #app),例如:

1
2
3
4
5
6
7
8
9
10
11
const app = new Vue({
el: '#app', // 指定掛載的 DOM 節點
data: {
count: 0 // 可以直接用物件定義
},
methods: {
increment() {
this.count++;
}
}
});

特點:

  • new Vue() 是根實例的標誌,表示這是一個單獨的 Vue 應用程序。
  • data 可以直接是一個物件 {}
  • 根實例通常會有 el 屬性,用來指定掛載的 DOM 節點。

2. Vue 組件(export defaultVue.component

當你定義一個組件時,通常會看到 export defaultVue.component。組件是用來在 Vue 應用中重複使用的結構化代碼。

示例 1:export default 定義的組件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
export default {
data() {
return {
count: 0 // 必須用函數返回一個物件
};
},
methods: {
increment() {
this.count++;
}
},
template: `
<div>
<p>{{ count }}</p>
<button @click="increment">增加</button>
</div>
`
};

示例 2:用 Vue.component 定義的組件

1
2
3
4
5
6
7
8
9
10
11
12
Vue.component('my-component', {
data() {
return {
count: 0
};
},
template: `
<div>
<p>{{ count }}</p>
</div>
`
});

特點:

  • 使用 export defaultVue.component 定義。
  • data 必須是函數,返回一個物件,確保多個組件實例有獨立的數據副本。
  • 組件會在根實例內使用,或嵌套到其他組件中。

3. 如何知道你使用的是實例還是組件?

看代碼的上下文

  • 根實例
    • 通常會有 new Vue()
    • 必須掛載到 DOM 節點(如 el: '#app'mount('#app'))。
  • 組件
    • 會出現在 export defaultVue.component() 的定義中。
    • 不會直接掛載到 DOM 節點,而是被其他地方引用(如在 template 中)。

示例:根實例 vs 組件

根實例:

1
2
3
4
5
6
new Vue({
el: '#app',
data: {
message: '這是根實例'
}
});

組件:

1
2
3
4
5
6
7
export default {
data() {
return {
message: '這是組件'
};
}
};

main.js 的結構

在 Vue CLI 應用中,通常 main.js 文件定義的是根實例,而其他 .vue 文件是組件。

main.js 中的根實例:

1
2
3
4
5
6
import Vue from 'vue';
import App from './App.vue';

new Vue({
render: h => h(App),
}).$mount('#app'); // 挂载到 #app

App.vue 中的組件:

1
2
3
4
5
6
7
export default {
data() {
return {
title: '這是一個組件'
};
}
};

小結

  • new Vue() 表示創建的是根實例data 可以是直接物件。
  • export defaultVue.component 則是定義組件data 必須是函數,返回物件。
  • 如果你在 .vue 文件中用 export default,那麼你正在定義組件,data 需要是函數形式。