微信小程序 wx:for 與 wx:for-items 與 wx:key的正確用法
前言:
微信小程序的循環(huán)實(shí)現(xiàn),通過wx:for 與 wx:for-items 與 wx:key,那么他的主要使用特點(diǎn)是什么呢?
1 wx:for
從目前的例子看,wx:for 的使用確實(shí)是對數(shù)組來做的,參考微信icon示例程序。
示例里面都是對數(shù)組進(jìn)行條件判斷,比如iconsizejius就是一個(gè)典型的數(shù)組。
2 wx:for-items 與wx:for-item
2.1 wx:for-items
現(xiàn)在看wx:for-items, 和wx:for比,wx:for-items有什么不同呢?
【案】筆者認(rèn)為wx:for-items應(yīng)該可以包容wx:for,而不是像有些朋友說,wx:for用于數(shù)組的單循環(huán),而wx:for-items用于可嵌套的多級循環(huán)。
很顯然,wx:for-items,在上面的例子里面用于數(shù)組,也同時(shí)用于外層的單循環(huán)。
【案】
<view wx:for-items="{{array}}" wx:for-item="item">
分析一下,
wx:for-items首先指向了數(shù)組array,
之后,wx:for-items 選取了item,做進(jìn)一步的循環(huán)STEPS,
我們看到array的一個(gè)item包含兩個(gè)屬性,
2.2 wx:for-item
wx:for-item注意wx:for-items比少了S,wx:for-item主要只是對循環(huán)項(xiàng)目數(shù)組的元素(item in array)重新命名,這里
這里array的元素被item取代來表示。
還是剛才的例子,現(xiàn)在看右邊,item被用于對循環(huán)內(nèi)體的設(shè)置,
然后實(shí)現(xiàn)對數(shù)組內(nèi)多個(gè)元素的渲染
3 wx:key
wx:key是對微信循環(huán)功能的一次提升,在軟件編譯的時(shí)候,微信會提示你是用 wx:key來穩(wěn)定視圖層的項(xiàng)目顯示。
摘取 一段定義的描述,
wx:key 的值以3種形式提供
- 字符串
代表在 for 循環(huán)的 array 中 item 的某個(gè) property,該 property 的值需要是列表中唯一的字符串或數(shù)字,且不能動態(tài)改變。
- 保留關(guān)鍵字 *this
代表在 for 循環(huán)中的 item 本身,這種表示需要 item 本身是一個(gè)唯一的字符串或者數(shù)字,如:
當(dāng)數(shù)據(jù)改變觸發(fā)渲染層重新渲染的時(shí)候,會校正帶有 key 的組件,框架會確保他們被重新排序,而不是重新創(chuàng)建,以確保使組件保持自身的狀態(tài),并且提高列表渲染時(shí)的效率。
一般是指定一個(gè)唯一的字段(類似于id的定義);
- 通配符+名字
例如 *item
4 嵌套的應(yīng)用
上面的例子都比較簡單,只有一層或者一個(gè)屬性的嵌套,現(xiàn)在看一個(gè)復(fù)雜一點(diǎn)的,例子,來源于官方的組件展示程序。
這是一個(gè)多級菜單的展示,用戶點(diǎn)擊后,會展開三個(gè)選項(xiàng),而每一個(gè)選項(xiàng)對應(yīng)一個(gè)頁面,
<view class="index-bd"> <view class="kind-list"> <block wx:for-items="{{list}}" wx:key="{{item.id}}"> <view class="kind-list-item"> <view id="{{item.id}}" class="kind-list-item-hd {{item.open ? 'kind-list-item-hd-show' : ''}}" bindtap="kindToggle"> <view class="kind-list-text">{{item.name}}</view> <image class="kind-list-img" src="resources/kind/{{item.id}}.png"></image> </view> <view class="kind-list-item-bd {{item.open ? 'kind-list-item-bd-show' : ''}}"> <view class="navigator-box {{item.open ? 'navigator-box-show' : ''}}"> <block wx:for-items="{{item.pages}}" wx:for-item="page" wx:key="*item"> <navigator url="pages/{{page}}/{{page}}" class="navigator"> <view class="navigator-text">{{page}}</view> <view class="navigator-arrow"></view> </navigator> </block> </view> </view> </view> </block> </view> </view>
從這段代碼里面,我們看到, 針對上面這個(gè)比較復(fù)雜的數(shù)據(jù)結(jié)構(gòu),在block tag里面(有兩層block)
先對list,用wx:for-items,
<block wx:for-items="{{list}}" wx:key="{{item.id}}">
做最外層循環(huán),這里list里面的數(shù)組元素,就變?yōu)閕tem了,item有4個(gè)屬性,其中一個(gè)是pages,
【注意】這里wx:for-items和wx:for的不同就是,wx:for-items默認(rèn)的循環(huán)項(xiàng)為item,不需要指定了。所以,第二層循環(huán)的item,解釋器已經(jīng)理解了,現(xiàn)在item下面的pages,依舊是一個(gè)數(shù)組,我們可以在嵌套來遍歷他。
<block wx:for-items="{{item.pages}}" wx:for-item="page" wx:key="*item">
然后,用wx:for-items,對list里面的pages屬性內(nèi)嵌數(shù)組做了遍歷循環(huán),注意,后面又立即跟了wx:for-item="page",注意,這里沒有s,就是對item的元素pages數(shù)組的元素重新命名為page了,后面的page操作,就是對這個(gè)內(nèi)嵌數(shù)組操作。這里wx:for-item的命名其實(shí)是一個(gè)可選項(xiàng),如果不命名,默認(rèn)就是item,也就是嵌套的循環(huán)下標(biāo)也是item,大概是為了避免誤解,導(dǎo)致,微信團(tuán)隊(duì),又加了這一個(gè)功能,個(gè)人覺得有點(diǎn)多余。
參考:
1小程序wx:for、wx:for-items和wx:for-item的正確用法
https://developers.weixin.qq.com/miniprogram/dev/component/image.html?search-key=wx%3Afor
2 微信小程序的wx:for,wx:for-items,wx:for-item,wx:key等的關(guān)系及正確使用
https://blog.csdn.net/u013338742/article/details/78785918
到此這篇關(guān)于微信小程序 wx:for 與 wx:for-items 與 wx:key的正確用法的文章就介紹到這了,更多相關(guān)小程序 wx:for wx:for-items wx:key內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
js讀寫COOKIE實(shí)現(xiàn)記住帳號或密碼的代碼(js讀寫COOKIE)
js實(shí)現(xiàn)記住帳號或密碼(js讀寫COOKIE) 的實(shí)現(xiàn)代碼,原理就是利用cookies保存于讀取功能。2010-05-05JS 驗(yàn)證密碼 不能為空,必須含有數(shù)字、字母、特殊字符,長度在8-12位
這篇文章主要介紹了JS 驗(yàn)證密碼 不能為空,必須含有數(shù)字、字母、特殊字符,長度在8-12位的相關(guān)資料,需要的朋友可以參考下2017-06-06模擬彈出窗口效果,關(guān)閉層之前,不能選擇后面的頁內(nèi)容
模擬彈出窗口效果,關(guān)閉層之前,不能選擇后面的頁內(nèi)容...2007-02-02js獲取UserControl內(nèi)容為拼html時(shí)提供方便
js獲取UserControl內(nèi)容時(shí)無法測試通過,原來是繼承了Page 然后使用VerifyRenderingInServerForm驗(yàn)證2014-11-11JavaScript實(shí)現(xiàn)大文件分片上傳處理
這篇文章主要為大家詳細(xì)介紹了JavaScript實(shí)現(xiàn)大文件分片上傳處理,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-08-08JS實(shí)現(xiàn)字符串中去除指定子字符串方法分析
這篇文章主要介紹了JS實(shí)現(xiàn)字符串中去除指定子字符串方法,結(jié)合實(shí)例形式分析了javascript使用字符串替換與分割、聚合兩種子字符串去除相關(guān)操作技巧,需要的朋友可以參考下2018-05-05JS獲取圖片實(shí)際寬高及根據(jù)圖片大小進(jìn)行自適應(yīng)
圖片實(shí)際寬高使用js進(jìn)行獲取以及根據(jù)圖片大小進(jìn)行自適應(yīng),此功能個(gè)人感覺比較實(shí)用,在此貢獻(xiàn)出來,希望對大家有所幫助2013-08-08js 數(shù)組的for循環(huán)到底應(yīng)該怎么寫?
說實(shí)話,我是個(gè)比較喜歡懷疑權(quán)威的人,但是在有些權(quán)威的問題一直在我面前閃,閃啊閃,我就開始不懷疑他們了,因?yàn)橛?0000個(gè)人說這個(gè)東西是對的,我就會覺得它的確是對的吧。2010-05-05