微信小程序 wx:for 與 wx:for-items 與 wx:key的正確用法
前言:
微信小程序的循環(huán)實現(xiàn),通過wx:for 與 wx:for-items 與 wx:key,那么他的主要使用特點是什么呢?
1 wx:for
從目前的例子看,wx:for 的使用確實是對數(shù)組來做的,參考微信icon示例程序。
示例里面都是對數(shù)組進行條件判斷,比如iconsizejius就是一個典型的數(shù)組。
2 wx:for-items 與wx:for-item
2.1 wx:for-items
現(xiàn)在看wx:for-items, 和wx:for比,wx:for-items有什么不同呢?
【案】筆者認為wx:for-items應該可以包容wx:for,而不是像有些朋友說,wx:for用于數(shù)組的單循環(huán),而wx:for-items用于可嵌套的多級循環(huán)。
很顯然,wx:for-items,在上面的例子里面用于數(shù)組,也同時用于外層的單循環(huán)。
【案】
<view wx:for-items="{{array}}" wx:for-item="item">
分析一下,
wx:for-items首先指向了數(shù)組array,
之后,wx:for-items 選取了item,做進一步的循環(huán)STEPS,
我們看到array的一個item包含兩個屬性,
2.2 wx:for-item
wx:for-item注意wx:for-items比少了S,wx:for-item主要只是對循環(huán)項目數(shù)組的元素(item in array)重新命名,這里
這里array的元素被item取代來表示。
還是剛才的例子,現(xiàn)在看右邊,item被用于對循環(huán)內(nèi)體的設置,
然后實現(xiàn)對數(shù)組內(nèi)多個元素的渲染
3 wx:key
wx:key是對微信循環(huán)功能的一次提升,在軟件編譯的時候,微信會提示你是用 wx:key來穩(wěn)定視圖層的項目顯示。
摘取 一段定義的描述,
wx:key 的值以3種形式提供
- 字符串
代表在 for 循環(huán)的 array 中 item 的某個 property,該 property 的值需要是列表中唯一的字符串或數(shù)字,且不能動態(tài)改變。
- 保留關鍵字 *this
代表在 for 循環(huán)中的 item 本身,這種表示需要 item 本身是一個唯一的字符串或者數(shù)字,如:
當數(shù)據(jù)改變觸發(fā)渲染層重新渲染的時候,會校正帶有 key 的組件,框架會確保他們被重新排序,而不是重新創(chuàng)建,以確保使組件保持自身的狀態(tài),并且提高列表渲染時的效率。
一般是指定一個唯一的字段(類似于id的定義);
- 通配符+名字
例如 *item
4 嵌套的應用
上面的例子都比較簡單,只有一層或者一個屬性的嵌套,現(xiàn)在看一個復雜一點的,例子,來源于官方的組件展示程序。
這是一個多級菜單的展示,用戶點擊后,會展開三個選項,而每一個選項對應一個頁面,
<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>
從這段代碼里面,我們看到, 針對上面這個比較復雜的數(shù)據(jù)結構,在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個屬性,其中一個是pages,
【注意】這里wx:for-items和wx:for的不同就是,wx:for-items默認的循環(huán)項為item,不需要指定了。所以,第二層循環(huán)的item,解釋器已經(jīng)理解了,現(xiàn)在item下面的pages,依舊是一個數(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操作,就是對這個內(nèi)嵌數(shù)組操作。這里wx:for-item的命名其實是一個可選項,如果不命名,默認就是item,也就是嵌套的循環(huán)下標也是item,大概是為了避免誤解,導致,微信團隊,又加了這一個功能,個人覺得有點多余。
參考:
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等的關系及正確使用
https://blog.csdn.net/u013338742/article/details/78785918
到此這篇關于微信小程序 wx:for 與 wx:for-items 與 wx:key的正確用法的文章就介紹到這了,更多相關小程序 wx:for wx:for-items wx:key內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
js讀寫COOKIE實現(xiàn)記住帳號或密碼的代碼(js讀寫COOKIE)
js實現(xiàn)記住帳號或密碼(js讀寫COOKIE) 的實現(xiàn)代碼,原理就是利用cookies保存于讀取功能。2010-05-05JS 驗證密碼 不能為空,必須含有數(shù)字、字母、特殊字符,長度在8-12位
這篇文章主要介紹了JS 驗證密碼 不能為空,必須含有數(shù)字、字母、特殊字符,長度在8-12位的相關資料,需要的朋友可以參考下2017-06-06模擬彈出窗口效果,關閉層之前,不能選擇后面的頁內(nèi)容
模擬彈出窗口效果,關閉層之前,不能選擇后面的頁內(nèi)容...2007-02-02js獲取UserControl內(nèi)容為拼html時提供方便
js獲取UserControl內(nèi)容時無法測試通過,原來是繼承了Page 然后使用VerifyRenderingInServerForm驗證2014-11-11js 數(shù)組的for循環(huán)到底應該怎么寫?
說實話,我是個比較喜歡懷疑權威的人,但是在有些權威的問題一直在我面前閃,閃啊閃,我就開始不懷疑他們了,因為有10000個人說這個東西是對的,我就會覺得它的確是對的吧。2010-05-05