成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

用好 Vue 中 v-for 循環的 7 種方法

開發 前端
Vue 中的 v-for 循環允許你在模板代碼中編寫 for 循環,尤其是當我們做下面的操作時非常有用。

Vue 中的 v-for 循環允許你在模板代碼中編寫 for 循環,尤其是當我們做下面的操作時非常有用:

  • 渲染數組或列表
  • 遍歷對象屬性

在最基本的用法中,v-for 循環是這樣使用的:

  1. <ul> 
  2.   <li v-for='product in products'> 
  3.     {{ product.name }} 
  4.   </li> 
  5. </ul> 

不過它還有一些你不知道的用法,可以使你的 v-for 代碼更加精確、和高效。

1. 始終在 v-for 循環中使用 key

首先要討論的很多人都已經知道的一種用法:在 v-for 循環中使用 key。通過設置唯一的 key 屬性,可以確保你的組件按期望的方式工作。

如果我們不使用 key,vue 將會使 DOM 盡可能的高效。這可能意味著 v-for 元素可能出現亂序或其他不可預測的行為。

如果我們對每個元素都有一個唯一的鍵引用,那可以更好地預測 DOM 將會如何被操縱。

  1. <ul> 
  2.   <li  
  3.     v-for='product in products' 
  4.     :key='product._id'   
  5.   > 
  6.     {{ product.name }} 
  7.   </li> 
  8. </ul> 

2. 用 v-for 在一個范圍內進行循環

雖然大多數情況下 v-for 用于遍歷數組或對象,但肯定存在我們可能只想迭代特定次數的情況。

假設我們要網店創建一個分頁系統,并且想在每頁只顯示 10 個商品品。通過使用變量來跟蹤我們當前的頁碼,可以像這樣處理分頁:

  1. looping over a range<ul> 
  2.   <li v-for='index in 10' :key='index'> 
  3.     {{ products[page * 10 + index] }} 
  4.   </li> 
  5. </ul> 

3. 避免在循環中使用 v-if

在 v-for 循環中錯誤地使用 v-if 來過濾數據[1] 是非常常見的。

雖然這樣做看起來很直觀,但它會導致一個巨大的性能問題—— vue 的 v-for 優先于 v-if 指令 [2]。

這意味著你的組件會遍歷每一個元素,然后檢查 v-if 條件查看它是否應該被渲染。

如果把 v-if 與 v-for 放在一起使用,無論你的條件是什么,都會將遍歷數組的每一個元素。

  1. // 不好的代碼 
  2. <ul> 
  3.   <li  
  4.     v-for='product in products'  
  5.     :key='product._id'  
  6.     v-if='product.onSale' 
  7.   > 
  8.     {{ product.name }} 
  9.   </li> 
  10. </ul> 

上面的代碼會引發什么題呢?

假如我們的商品數組中有幾千個項目,但是只有 3 個處于銷售狀態產品需要渲染。那么每次重新渲染時,即使銷售的 3 種產品根本沒有變化,vue 也必須遍歷幾千個項目。所以應該盡量避免這種情況。

接下來是兩種替代方案,而不是把 v-for 與 v-if 放在一起用。

4. 改用計算屬性或方法

為了避免上述問題,應該在我們的模板中迭代之前先過濾這些數據。有兩種非常相似的方法可以做到:

  • 使用計算屬性
  • 使用過濾方法

至于用哪種方法你自己說了算。下面對兩者進行簡單的介紹。

首先需要設置一個計算屬性。為了打到與之前使用 v-if 相同的效果,代碼應該是這樣:

  1. <ul> 
  2.   <li v-for='products in productsOnSale' :key='product._id' > 
  3.     {{ product.name }} 
  4.   </li> 
  5. </ul> 
  6.  
  7. // ... 
  8. <script> 
  9.   export default { 
  10.     data () { 
  11.       return { 
  12.         products: [] 
  13.       } 
  14.     }, 
  15.     computed: { 
  16.       productsOnSale: function () { 
  17.         return this.products.filter(product => product.onSale) 
  18.       } 
  19.     } 
  20.   } 
  21. </script> 

這樣做有幾個好處:

  • 數據屬性只會在依賴項發生變化時才會被重新評估
  • 模板只會遍歷在售商品,而不是每一個項目

第二種方法的代碼幾乎和前面一樣:

  1. <ul> 
  2.   <li v-for='products in productsOnSale(50))' :key='product._id' > 
  3.     {{ product.name }} 
  4.   </li> 
  5. </ul> 
  6.  
  7. // ... 
  8.  
  9. <script> 
  10.   export default { 
  11.     data () { 
  12.       return { 
  13.         products: [] 
  14.       } 
  15.     }, 
  16.     methods: { 
  17.       productsOnSale (maxPrice) { 
  18.         return this.products.filter(product => product.onSale && product.price < maxPrice
  19.       } 
  20.     } 
  21.   } 
  22. </script> 

5. 把循環放到包裝元素中

有時候你可能想把 v-for 與 v-if 結合起來使用,用來確定是否需要渲染一個列表。

假如我們只想在用戶登錄時渲染商品列表該怎么辦。

  1. // 不好的代碼 
  2. <ul> 
  3.   <li  
  4.     v-for='product in products'  
  5.     :key='product._id'  
  6.     v-if='isLoggedIn' <!-- HERE --> 
  7.   > 
  8.     {{ product.name }} 
  9.   </li> 
  10. </ul> 

上面的代碼會有什么問題?

和前面一樣, vue 模板會優先考慮 v-for ,所以它會遍歷每個元素并檢查 v-if。

即使最終什么都不渲染,也會遍歷幾千個元素!

比較簡單的解決方案是給代碼的 v-if 語句換個位置。

  1. // 這樣比較好 
  2. <ul v-if='isLoggedIn'> <!-- Much better --> 
  3.   <li  
  4.     v-for='product in products'  
  5.     :key='product._id'  
  6.   > 
  7.     {{ product.name }} 
  8.   </li> 
  9. </ul> 

這要好很多,因為如果 isLoggedIn 為 false 的話根本不需要進行迭代。

6. 在循環中訪問索引

除了遍歷數組并訪問每個元素之外,還可以跟蹤每個項目的索引。

為了達到這個目的,必須在我們的項目之后添加一個索引值。這非常簡單,對于分頁、顯示列表索引、顯示排名等操作都很有用。

  1. <ul> 
  2.   <li v-for='(products, index) in products' :key='product._id' > 
  3.     Product #{{ index }}: {{ product.name }} 
  4.   </li> 
  5. </ul> 

7. 迭代對象

到目前為止,我們只真正研究了用 v-for 遍歷數組。但是我們可以很容易地迭代對象的鍵值對。

與訪問元素的索引類似,我們必須向循環中添加另一個值。如果用單個參數循環對象的話將會循環所有項目。

如果我們再添加一個參數,將會得到 item 和 key。如果添加第三個還可以訪問 v-for循環的 index。

假設要遍歷商品的每個屬性,代碼應該是這樣:

  1. <ul> 
  2.   <li v-for='(products, index) in products' :key='product._id' > 
  3.     <span v-for='(item, key, index) in product' :key='key'> 
  4.       {{ item }} 
  5.     </span> 
  6.   </li> 
  7. </ul> 

 

責任編輯:趙寧寧 來源: 前端先鋒
相關推薦

2013-05-13 09:25:58

虛擬化數據丟失

2024-04-24 12:45:06

index性能數組

2010-12-21 10:02:48

SilverlightWindows Pho

2020-04-27 08:44:07

語音欺詐黑客惡意攻擊

2013-04-19 09:47:30

虛擬化數據

2013-07-19 11:12:28

虛擬化數據丟失

2020-09-27 09:47:55

云計算支出云計算服務

2019-10-29 14:01:59

CIOIT創造力商業

2020-04-26 10:05:29

編程程序員技術

2019-10-10 10:19:23

智能數據大數據軟件

2021-03-08 09:32:04

Python文件命令

2022-04-25 17:49:05

云計算云安全安全

2009-11-07 19:09:35

Windows 7優惠

2020-09-14 14:18:05

Vue和React

2021-02-23 12:43:41

LinuxCinnamon桌面系統應用

2024-08-29 08:04:14

2018-08-09 20:47:41

2009-12-25 14:45:22

Windows 7系統定制

2020-10-28 09:45:02

安全數據泄露網絡

2019-12-10 13:37:07

大數據社交媒體
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久国产精品久久久久久 | 中文字幕在线视频观看 | 黄在线免费观看 | 国产精品日产欧美久久久久 | av黄色国产 | 久久99精品久久久久久国产越南 | 日韩中字幕 | 欧美日韩高清在线观看 | 夜夜操天天艹 | 久久这里只有精品首页 | 国产精品久久久久久一级毛片 | 毛片网在线观看 | 亚洲第一在线 | 久久高潮 | 欧美精品一区二区三区四区 在线 | 国产精品电影在线观看 | 欧美aⅴ在线观看 | 99精品国产一区二区三区 | 中文一区| 91福利在线观看 | 91在线精品秘密一区二区 | 欧美日韩国产传媒 | 日本精品视频在线 | 人人爽日日躁夜夜躁尤物 | 欧美一区二区三区免费电影 | 99re在线免费视频 | 91精品国产综合久久久久久丝袜 | 日韩精品视频在线播放 | 国产精品久久欧美久久一区 | 亚洲国产精品va在线看黑人 | 99精品国产一区二区青青牛奶 | 免费视频久久 | 久久伊人亚洲 | 亚洲国产成人久久久 | www久久99| 啪视频在线 | 国产亚洲一区在线 | 国产精品久久av | 中文字幕在线免费 | 91tv在线观看 | 伊人网站 |