Heim  >  Artikel  >  Web-Frontend  >  Analyse von Beispielen für bedingte Rendering-Funktionen in Vue-Dokumenten

Analyse von Beispielen für bedingte Rendering-Funktionen in Vue-Dokumenten

PHPz
PHPzOriginal
2023-06-21 10:09:391262Durchsuche

Vue ist ein sehr beliebtes JavaScript-Framework. Es bietet einige entwicklerfreundliche Tools und Funktionen, die es Entwicklern ermöglichen, komplexe Webanwendungen bequemer zu erstellen. Unter diesen ist die bedingte Rendering-Funktion eine sehr nützliche Funktion in Vue, die Entwicklern dabei helfen kann, Elemente auf der Seite dynamisch zu steuern und zu rendern. In diesem Artikel analysieren und demonstrieren wir die bedingte Rendering-Funktion im Vue-Dokument.

1. Einführung in die bedingte Rendering-Funktion von Vue

Sie können die Anweisungen v-if und v-show in Vue verwenden, um bedingtes Rendering zu implementieren. Mit diesen Anweisungen können wir anhand von Bedingungen steuern, ob bestimmte Elemente auf der Seite gerendert werden müssen.

Die v-if-Anweisung bestimmt, ob ein Element basierend auf dem Wert des Ausdrucks gerendert werden muss. Wenn der Wert des Ausdrucks wahr ist, wird das Element andernfalls nicht gerendert. Zum Beispiel:

<div v-if="shown">
  这是一个需要被渲染出来的div元素
</div>

Im obigen Beispiel wird das div-Element nur dann auf der Seite gerendert, wenn der Wert des angezeigten Attributs der Vue-Instanz wahr ist.

Die v-show-Direktive kann auch das bedingte Rendern von Elementen implementieren, ihre Implementierung unterscheidet sich jedoch etwas von der von v-if. Die v-show-Anweisung ändert das Anzeigeattribut des Elements dynamisch basierend auf dem Wert des Ausdrucks. Wenn der Wert des Ausdrucks wahr ist, wird das Anzeigeattribut des Elements auf Block gesetzt, sodass das Element auf der Seite angezeigt wird ; andernfalls wird das Anzeigeattribut des Elements auf „Blockieren“ gesetzt, wodurch das Element auf der Seite ausgeblendet wird. Zum Beispiel:

<div v-show="shown">
  这是一个需要被渲染出来的div元素
</div>

Solange im obigen Beispiel der Wert des angezeigten Attributs der Vue-Instanz wahr ist, wird das div-Element angezeigt, andernfalls wird es ausgeblendet.

2. Unterschiede zwischen v-if und v-show

Obwohl sowohl v-if als auch v-show eine bedingte Darstellung von Elementen erreichen können, unterscheiden sie sich in ihren Implementierungsmethoden, die sich hauptsächlich in den folgenden Aspekten widerspiegeln:

  1. Rendering-Overhead

v-if-Anweisung bewertet den Wert des bedingten Ausdrucks jedes Mal neu, wenn er gerendert wird, und fügt Elemente basierend auf dem Wert des Ausdrucks hinzu oder entfernt sie. Wenn der Wert des bedingten Ausdrucks komplex ist oder viele Elemente vorhanden sind, ist der Rendering-Aufwand von v-if daher relativ groß.

Der Befehl v-show blendet Elemente nur aus oder zeigt sie an, indem das Anzeigeattribut des Elements dynamisch geändert wird. Es ist nicht erforderlich, das Element neu zu erstellen oder zu entfernen, sodass der Rendering-Aufwand relativ gering ist. Beim ersten Rendern des Elements muss die v-show-Anweisung jedoch zunächst den Wert des bedingten Ausdrucks ermitteln und das Anzeigeattribut des Elements basierend auf diesem Wert festlegen, sodass die Rendering-Geschwindigkeit möglicherweise langsamer ist als bei v-if.

  1. Anfänglicher Rendering-Overhead

Die v-if-Anweisung wird nicht gerendert, wenn der bedingte Ausdruck anfänglich falsch ist. Das Rendern beginnt erst, wenn der Wert des bedingten Ausdrucks wahr wird. Daher ist der anfängliche Rendering-Overhead von v-if kleiner als der von v-show.

Der Befehl v-show legt das Anzeigeattribut des Elements basierend auf dem Wert des bedingten Ausdrucks beim ersten Rendern dynamisch fest und bestimmt so, ob das Element angezeigt wird. Daher ist der anfängliche Rendering-Aufwand von v-show größer als der von v-if.

  1. Rendering-Leistung

v-if-Anweisung beurteilt neu, wenn sich der Wert des bedingten Ausdrucks ändert, und erstellt oder entfernt das entsprechende Element neu. Wenn nur eine kleine Anzahl von Elementen dynamisch gerendert werden muss, ist die Leistung von v-if etwas besser als die von v-show.

Der Befehl v-show steuert nur das Anzeigen und Ausblenden von Elementen durch dynamisches Ändern des Anzeigeattributs des Elements. Es ist nicht erforderlich, das Element neu zu erstellen oder zu entfernen. Wenn daher häufig die Anzeige und das Ausblenden von Elementen geändert werden muss, ist die Leistung von v-show besser als die von v-if.

3. Auswahl der Verwendungsszenarien für v-if und v-show

Basierend auf den oben genannten Unterschieden können wir v-if und v-show entsprechend den tatsächlichen Anforderungen auswählen.

Wenn Sie häufig zwischen der Anzeige und dem Ausblenden von Elementen wechseln müssen, können Sie den Befehl v-show verwenden. Zum Beispiel: Wird verwendet, um bestimmte Bedienfelder oder Dialogfelder anzuzeigen und auszublenden, Menüs zu wechseln usw.

Wenn Sie anhand komplexer Logik bestimmen müssen, ob bestimmte Elemente gerendert werden müssen, oder wenn Sie Elemente dynamisch erstellen oder entfernen müssen, können Sie die v-if-Anweisung verwenden. Zum Beispiel: Rendern bestimmter Elemente auf der Seite entsprechend dem Anmeldestatus des Benutzers, Rendern bestimmter Bedienschaltflächen auf der Seite entsprechend den Berechtigungen des Benutzers usw.

4. Beispielanalyse

Jetzt demonstrieren wir die Verwendung von v-if und v-show anhand eines Beispiels.

Angenommen, wir müssen eine Liste von Produkten auf der Seite anzeigen. Die Liste enthält Informationen wie Produktname, Preis, Lagerbestand und Kaufschaltfläche. Gleichzeitig muss die Liste auch eine Filterfunktion bieten, damit Benutzer unterschiedliche Produktinformationen basierend auf unterschiedlichen Bedingungen anzeigen können. Die konkrete Implementierung ist wie folgt:

  1. Produktlistendaten definieren

Zuerst müssen wir ein Array mit Produktinformationen definieren. Hier gehen wir vorübergehend davon aus, dass das Array bereits die Informationen von 10 Produkten enthält. Das Format des Arrays ist wie folgt:

goodsList: [
  {
    name: "商品A",
    price: 100,
    stock: 50
  },
  {
    name: "商品B",
    price: 200,
    stock: 80
  },
  ...
]
  1. Filterbedingungen und Filterergebnisdaten definieren

Um die Filterfunktion zu implementieren, müssen wir ein Formular definieren, das das Bedingungseingabefeld zum Filtern enthält. Über diese Eingabefelder können Benutzer verschiedene Filterbedingungen eingeben, um unterschiedliche Produktinformationen anzuzeigen.

Gleichzeitig müssen wir auch eine Variable zum Speichern der gefilterten Ergebnisse definieren, um Produkte herauszufiltern, die die Filterbedingungen nicht erfüllen. Filterbedingungen und Filterergebnisse werden wie folgt definiert:

filterForm: {
  name: "",
  minPrice: "",
  maxPrice: ""
},
filteredGoodsList: []
  1. 实现筛选逻辑

为了实现筛选功能,我们需要在Vue实例中定义一个方法,该方法会在每次需要筛选时被调用。该方法会根据用户输入的筛选条件,从商品列表中筛选出符合条件的商品,并将结果存储到filteredGoodsList中。

具体实现代码如下:

methods: {
  filterGoodsList() {
    let filterName = this.filterForm.name.toLowerCase()
    let filterMinPrice = this.filterForm.minPrice ? parseInt(this.filterForm.minPrice) : Number.MIN_SAFE_INTEGER
    let filterMaxPrice = this.filterForm.maxPrice ? parseInt(this.filterForm.maxPrice) : Number.MAX_SAFE_INTEGER
    this.filteredGoodsList = this.goodsList.filter((item) => {
      let itemName = item.name.toLowerCase()
      return itemName.indexOf(filterName) !== -1 && item.price >= filterMinPrice && item.price <= filterMaxPrice
    })
  }
}

在这个方法中,我们首先将用户输入的筛选条件分别提取出来,并将maxPrice和minPrice转换为数字类型。然后,我们使用JavaScript数组的filter方法,从商品列表中筛选出符合条件的商品。可以看到,我们使用了itemName.indexOf(filterName) !== -1这种方式,即通过JavaScript中字符串的indexOf方法来检查itemName是否包含了filterName这个子串。如果包含,则返回true,表示该商品符合筛选条件;否则返回false,表示该商品不符合筛选条件。最后,我们将筛选结果存储到filteredGoodsList中。

  1. 实现列表渲染

我们可以通过v-for指令来遍历filteredGoodsList数组,并将每个数组元素渲染成一个商品信息块。具体实现代码如下:

<div v-for="(item, index) in filteredGoodsList" :key="index" class="goods-item">
  <div class="goods-name">{{ item.name }}</div>
  <div class="goods-price">{{ item.price }}</div>
  <div class="goods-stock">{{ item.stock }}</div>
  <div class="goods-buy-btn" v-show="item.stock > 0">购买</div>
  <div class="goods-sold-out" v-if="item.stock == 0">已售罄</div>
</div>

在这个代码中,我们将v-for指令绑定到filteredGoodsList数组上,这样就可以遍历这个数组中的所有元素。我们使用: key="index"来为每个元素设置一个唯一的key值,以便Vue能够高效地对列表进行更新。

在每个商品信息块中,我们使用v-show和v-if指令来根据不同的商品库存信息来动态展示不同的元素。如果该商品库存大于0,则会显示购买按钮;否则,会显示“已售罄”的文字提示。

  1. 实现筛选表单和筛选按钮

最后,我们需要在页面上添加一个筛选表单,让用户可以输入不同的筛选条件来观察不同的商品信息。表单的代码如下:

<div class="filter-form">
  <label for="filter-name">商品名称:</label>
  <input type="text" id="filter-name" v-model="filterForm.name">
  <label for="filter-min-price">价格区间:</label>
  <input type="text" id="filter-min-price" placeholder="最小价格" v-model="filterForm.minPrice">
  -
  <input type="text" id="filter-max-price" placeholder="最大价格" v-model="filterForm.maxPrice">
  <button @click="filterGoodsList">筛选</button>
</div>

在这个代码中,我们使用了v-model指令将表单元素和Vue实例中的filterForm对象绑定在一起,从而实现了双向数据绑定。我们还添加了一个筛选按钮,在用户点击按钮时会触发filterGoodsList方法,从而重新进行商品列表的筛选和渲染。

六、总结

通过以上分析和实例演示,我们了解了Vue文档中的条件渲染函数的基本知识和使用方法,以及v-if和v-show指令在渲染开销、初始化渲染开销和渲染性能等方面的不同表现。最后,我们还运用条件渲染函数的知识,实现了一个商品列表及其筛选功能的实例。相信这些内容能够对您学习和使用Vue框架提供一些帮助。

Das obige ist der detaillierte Inhalt vonAnalyse von Beispielen für bedingte Rendering-Funktionen in Vue-Dokumenten. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn