文章

條件與列表渲染

在 Vue 3 中,條件渲染列表渲染 是用來動態顯示或隱藏元素,以及根據數據渲染一組元素的功能。它們通過 Vue 提供的指令進行操作,使應用可以根據不同的狀態和數據進行靈活的展示。


1. 條件渲染

條件渲染是指根據條件來顯示或隱藏元素。Vue 提供了 v-ifv-else-ifv-elsev-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>

在這個範例中,當 isVisibletrue 時,會顯示該段落。當點擊按鈕時,isVisible 值會變化,段落也會根據條件顯示或消失。

v-else-if 和 v-else

當有多個條件需要進行判斷時,可以使用 v-else-ifv-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-showv-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-ifv-for 一起使用來實現條件渲染:

1
2
3
<ul>
  <li v-for="item in items" v-if="item.isActive" :key="item.id"></li>
</ul>

這樣只有當 item.isActivetrue 的時候,該項目才會被渲染出來。


總結

  • 條件渲染 通過 v-ifv-else-ifv-elsev-show 來動態顯示或隱藏元素。v-if 會將元素從 DOM 中完全移除,而 v-show 則僅通過 CSS 控制顯示。
  • 列表渲染 使用 v-for 指令來根據數據渲染多個 DOM 元素,可以遍歷數組和對象。設置唯一的 key 值能夠提高渲染效率。

這些功能在日常的 Vue 開發中非常常用,讓開發者可以輕鬆處理動態渲染和複雜的應用場景。

本文章以 CC BY 4.0 授權