微信小程序wxml列表渲染原理解析
這篇文章主要介紹了微信小程序wxml列表渲染原理解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
列表渲染存在的意義
以電商為例,我們希望渲染5個商品,而又希望容易改變,我們就要在wxml中動態(tài)添加。
<view> <block wx:for="{{products}}" wx:for-item="item" wx:key="index"> <view>{{index+1}}:{{item.name}}</view> </block> </view>
Page({ data: { message: "hello world", products: [{ name: "商品A" }, { name: "商品B" }, { name: "商品C" }, { name: "商品D" }, { name: "商品E" } ] } })
上面在一個非顯示組件block中,我們渲染五個有內(nèi)容的view
wx:for是循環(huán)數(shù)組,wx:for-item即給列表賦別名
子循環(huán)
<view wx:for="{{parentList}}"> {{item.id}} <view wx:for="{{item.childList}}" wx:for-item="items"> {{items.name}}{{items.account}} </view>
wx:key用來穩(wěn)定渲染,作為渲染想的唯一標(biāo)識(主要有三種)
1、字符串
代表在 for 循環(huán)的 array 中 item 的某個 property,該 property 的值需要是列表中唯一的字符串或數(shù)字,且不能動態(tài)改變。
data: { input_data: [ { id: 1, unique: "unique1" }, { id: 2, unique: "unique2" }, { id: 3, unique: "unique3" }, { id: 4, unique: "unique4" }, ] } //test.wxml <input value="id:{{item.id}}" wx:for="{{input_data}}" wx:key="unique" />
2、保留關(guān)鍵字 *this
代表在 for 循環(huán)中的 item 本身,這種表示需要 item 本身是一個唯一的字符串或者數(shù)字,如:
當(dāng)數(shù)據(jù)改變觸發(fā)渲染層重新渲染的時候,會校正帶有 key 的組件,框架會確保他們被重新排序,而不是重新創(chuàng)建,以確保使組件保持自身的狀態(tài),并且提高列表渲染時的效率。
data: { numberArray: [1, 2, 3, 4], stringArray:['aaa','ccc','fff','good'] } //test.wxml <input value="id:{{ item }}" wx:for="{{numberArray}}" wx:key="*this" /> <input value="id:{{ item }}" wx:for="{{stringArray}}" wx:key="*this" /> },
一般是指定一個唯一的字段(類似于id的定義);
3、通配符+名字
用wx:key和不用對比
wk:key | 組件識別 | 渲染情況 | 狀態(tài)情況 | for效率 |
---|---|---|---|---|
有 | 各組件可識別 | 渲染時僅改變組件順序 | 保持組件之前原來狀態(tài) | 效率高 |
無 | 組件無法識別 | 渲染時重新創(chuàng)建各組件 | 重置組件的初始狀態(tài) | 效率低 |
1.需要wx:key的情況
列表中項目的位置會動態(tài)改變或者有新的項目添加到列表中
希望列表中的項目保持自己的特征和狀態(tài)
(如 <input/> 中的輸入內(nèi)容,<switch/> 的選中狀態(tài))
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
javascript實現(xiàn)文本域?qū)懭胱址麜r限定字?jǐn)?shù)
這篇文章主要介紹了javascript實現(xiàn)文本域的寫入字符個數(shù)限定字?jǐn)?shù),需要的朋友可以參考下2014-02-02微信小程序?qū)崿F(xiàn)簡單手寫簽名組件的方法實例
在使用微信的時候,為方便我們發(fā)送文件可以直接在上面進行手寫簽名,這篇文章主要給大家介紹了關(guān)于利用微信小程序?qū)崿F(xiàn)簡單手寫簽名組件的相關(guān)資料,需要的朋友可以參考下2021-07-07js實現(xiàn)鼠標(biāo)懸停圖片上時滾動文字說明的方法
這篇文章主要介紹了js實現(xiàn)鼠標(biāo)懸停圖片上時滾動文字說明的方法,涉及js操作鼠標(biāo)事件的使用技巧,需要的朋友可以參考下2015-02-02TypeScript中的交叉類型和聯(lián)合類型示例講解
交叉類型簡單來說就是通過&符號將多個類型進行合并成一個類型,然后用type來聲明新生成的類型,聯(lián)合類型和交叉類型比較相似,聯(lián)合類型通過|符號連接多個類型從而生成新的類型,本文就這兩個類型結(jié)合示例代碼詳細(xì)講解,感興趣的朋友跟隨小編一起學(xué)習(xí)吧2022-12-12JavaScript之iterable_動力節(jié)點Java學(xué)院整理
這篇文章主要介紹了JavaScript之iterable,遍歷Array可以采用下標(biāo)循環(huán),遍歷Map和Set就無法使用下標(biāo)。為了統(tǒng)一集合類型,ES6標(biāo)準(zhǔn)引入了新的iterable類型,Array、Map和Set都屬于iterable類型2017-06-06JS運動相關(guān)知識點小結(jié)(附彈性運動示例)
這篇文章主要介紹了JS運動相關(guān)知識點,總結(jié)分析了JavaScript運動所涉及的相關(guān)知識點與注意事項,并附帶了一個JavaScript彈性運動的實例供大家參考,需要的朋友可以參考下2016-01-01javascript中typeof操作符和constucor屬性檢測
這篇文章主要介紹了javascript中typeof操作符和constucor屬性檢測的相關(guān)資料,需要的朋友可以參考下2015-02-02JavaScript中使用arguments獲得函數(shù)傳參個數(shù)實例
這篇文章主要介紹了JavaScript中使用arguments獲得函數(shù)傳參個數(shù)實例,本文用了多個例子來講解arguments的使用,需要的朋友可以參考下2014-08-08