詳解Vue的列表渲染
1. v-for:遍歷數組內容(常用)
in 也可以用 of 代替
<body> <div id="div1"> <li v-for='(p,i) in persons' :key=i> {{p.name}}--{{p.age}} <!-- 張--18 李--19 劉--17 --> </li> </div> </body> <script type="text/javascript"> Vue.config.produnctionTps=false new Vue({ el:"#div1", data:{ persons:[ {id:'001',name:"張",age:18}, {id:'002',name:"李",age:19}, {id:'002',name:"劉",age:17}, ] } }) </script>
2. v-for:遍歷對象屬性(常用)
<body> <div id="div1"> <li v-for='(p,k) in persons' :key=k> {{p}}--{{i}} <!-- 張--name 18--age --> </li> </div> </body> <script type="text/javascript"> Vue.config.produnctionTps=false new Vue({ el:"#div1", data:{ persons:{ name:"張", age:18 } } })
3.遍歷字符串(不常用)
<body> <div id="div1"> <li v-for='(p,i) in str' :key=i> {{p}}--{{i}} <!-- a--0 b--1 c--2 d--3 e--4 --> </li> </div> </body> <script type="text/javascript"> Vue.config.produnctionTps=false new Vue({ el:"#div1", data:{ str:"abcde" } }) </script>
4.遍歷指定次數(不常用)
<body> <div id="div1"> <li v-for='(p,i) in 5' :key=i> {{p}}--{{i}} <!-- 1--0 2--1 3--2 4--3 5--4 --> </li> </div> </body>
5.key 的作用和原理
在上面都用的index 作為key,但是在破壞順序修改dom以及有input內容就會出錯。僅在用於渲染頁面而不需要修改頁面時可用index作為key.
強烈建議用數據的唯一標識,如id、手機號、郵箱號作為key
1.虛擬DOM中key的作用:
key是虛擬DOM對象的標識,當數據發生變化時,Vue會根據[新數據]生成[新的虛擬DOM] ,隨後Vue進行[新虛擬DOM]與[舊虛擬DOM]的差異比較,比較規則如下:
2.對比規則:
(1).舊虛擬DOM中找到瞭與新虛擬DOM相同的key:
①.若虛擬DOM中內容沒變, 直接使用之前的真實DOM!
②.若虛擬DOM中內容變瞭,則生成新的真實DOM,隨後替換掉頁面中之前的真實DOM。
(2).舊虛擬DOM中未找到與新虛擬DOM相同的key創建新的真實DOM,隨後渲染到到頁面。
3.用index作為key可能會引發的問題:
1.若對數據進行:逆序添加、逆序刪除等破壞順序操作:
會產生沒有必要的真實DOM更新==>界面效果沒問題,但效率低。
2.如果結構中還包含輸入類的DOM:
會產生錯誤DOM更新==> 界面有問題。
4.開發中如何選擇key?
1.最好使用每條數據的唯一標識作 為key,比如id、 手機號、身份證號、學號等唯一值。
2.如果不存在對數據的逆序添加、逆序刪除等破壞順序操作,僅用於渲染列表用於展示,使用index作為key是沒有問題的。
總結
本篇文章就到這裡瞭,希望能夠給你帶來幫助,也希望您能夠多多關註WalkonNet的更多內容!