條件與列表渲染
在 Vue 3 中,條件渲染 和 列表渲染 是用來動態顯示或隱藏元素,以及根據數據渲染一組元素的功能。它們通過 Vue 提供的指令進行操作,使應用可以根據不同的狀態和數據進行靈活的展示。
1. 條件渲染
條件渲染是指根據條件來顯示或隱藏元素。Vue 提供了 v-if、v-else-if、v-else 和 v-show 指令來實現這種功能。
v-if
v-if 指令用來根據條件判斷是否渲染元素。如果條件為 false,該元素會完全從 DOM 中移除。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<div id="app">
<p v-if="isVisible">這是一段可見的文字。</p>
<button @click="toggleVisibility">切換可見性</button>
</div>
<script>
const app = Vue.createApp({
data() {
return {
isVisible: true
};
},
methods: {
toggleVisibility() {
this.isVisible = !this.isVisible;
}
}
});
app.mount('#app');
</script>
在這個範例中,當 isVisible 為 true 時,會顯示該段落。當點擊按鈕時,isVisible 值會變化,段落也會根據條件顯示或消失。
v-else-if 和 v-else
當有多個條件需要進行判斷時,可以使用 v-else-if 和 v-else,這樣可以處理不同的分支條件。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<div id="app">
<p v-if="score >= 90">你獲得了A級成績</p>
<p v-else-if="score >= 75">你獲得了B級成績</p>
<p v-else-if="score >= 60">你獲得了C級成績</p>
<p v-else>你未及格</p>
</div>
<script>
const app = Vue.createApp({
data() {
return {
score: 85
};
}
});
app.mount('#app');
</script>
根據 score 的不同值,對應的條件段落會被渲染。
v-show
v-show 和 v-if 的功能類似,但 v-show 只是通過設置元素的 CSS display 屬性來控制顯示與隱藏,而不會將元素從 DOM 中移除。這在需要頻繁顯示或隱藏元素時性能更高。
1
<p v-show="isVisible">這是一段可見的文字。</p>
v-show 的好處是 DOM 結構始終保留,但缺點是即使元素隱藏了,它依然會存在於 DOM 中。
2. 列表渲染
列表渲染 是用來根據數據數組或對象動態生成多個 DOM 元素的功能。Vue 提供了 v-for 指令來實現列表渲染,能夠高效地渲染一組項目。
基本使用方式
使用 v-for 指令來遍歷數組並渲染對應的元素:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<div id="app">
<ul>
<li v-for="item in items" :key="item"></li>
</ul>
</div>
<script>
const app = Vue.createApp({
data() {
return {
items: ['蘋果', '香蕉', '橙子']
};
}
});
app.mount('#app');
</script>
在這個範例中,v-for 用來遍歷 items 數組,並渲染每一個數據項為一個 li 元素。:key 是一個唯一的標識符,用於優化 Vue 的渲染性能。
遍歷對象
v-for 不僅可以用於數組,還可以用來遍歷對象的屬性。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<div id="app">
<ul>
<li v-for="(value, key) in person" :key="key">: </li>
</ul>
</div>
<script>
const app = Vue.createApp({
data() {
return {
person: {
name: 'John',
age: 25,
occupation: 'Engineer'
}
};
}
});
app.mount('#app');
</script>
這裡 v-for 會遍歷 person 對象,顯示屬性名和屬性值。
遍歷數組中的索引
可以同時獲取數組的索引和數據項:
1
2
3
<ul>
<li v-for="(item, index) in items" :key="index">: </li>
</ul>
用 key 優化渲染
v-for 渲染列表時,建議給每個項目設置唯一的 key 值,這樣 Vue 能夠更高效地追蹤和更新 DOM 元素。通常,應使用數據中的唯一 ID 作為 key。
1
<li v-for="item in items" :key="item.id"></li>
範例:動態列表
我們可以動態地添加、刪除數據項目,並實時更新列表:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<div id="app">
<ul>
<li v-for="(item, index) in items" :key="index"></li>
</ul>
<input v-model="newItem" placeholder="新增項目">
<button @click="addItem">添加</button>
</div>
<script>
const app = Vue.createApp({
data() {
return {
items: ['蘋果', '香蕉', '橙子'],
newItem: ''
};
},
methods: {
addItem() {
if (this.newItem) {
this.items.push(this.newItem);
this.newItem = '';
}
}
}
});
app.mount('#app');
</script>
在這個範例中,用戶可以在輸入框中輸入新的項目,並點擊按鈕動態添加到列表中。
列表渲染與條件渲染結合使用
可以結合 v-if 與 v-for 一起使用來實現條件渲染:
1
2
3
<ul>
<li v-for="item in items" v-if="item.isActive" :key="item.id"></li>
</ul>
這樣只有當 item.isActive 為 true 的時候,該項目才會被渲染出來。
總結
- 條件渲染 通過
v-if、v-else-if、v-else和v-show來動態顯示或隱藏元素。v-if會將元素從 DOM 中完全移除,而v-show則僅通過 CSS 控制顯示。 - 列表渲染 使用
v-for指令來根據數據渲染多個 DOM 元素,可以遍歷數組和對象。設置唯一的key值能夠提高渲染效率。
這些功能在日常的 Vue 開發中非常常用,讓開發者可以輕鬆處理動態渲染和複雜的應用場景。