微信小程序 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)文章
three.js中g(shù)sap動畫庫實(shí)現(xiàn)物體的動畫
本文主要介紹了three.js中g(shù)sap動畫庫實(shí)現(xiàn)物體的動畫,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07
微信小程序?qū)崿F(xiàn)上拉加載功能示例【加載更多數(shù)據(jù)/觸底加載/點(diǎn)擊加載更多數(shù)據(jù)】
這篇文章主要介紹了微信小程序?qū)崿F(xiàn)上拉加載功能,結(jié)合實(shí)例形式分析了微信小程序加載更多數(shù)據(jù)、觸底加載或點(diǎn)擊加載更多數(shù)據(jù)的相關(guān)實(shí)現(xiàn)技巧與操作注意事項(xiàng),需要的朋友可以參考下2020-05-05
微信小程序?qū)崿F(xiàn)驗(yàn)證碼倒計(jì)時(shí)效果
這篇文章主要介紹了微信小程序?qū)崿F(xiàn)驗(yàn)證碼倒計(jì)時(shí)效果,手機(jī)登錄、填手機(jī)號獲取驗(yàn)證碼,倒計(jì)時(shí)后重新獲取效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-05-05
Javascript中innerHTML用法實(shí)例分析
這篇文章主要介紹了Javascript中innerHTML用法,實(shí)例分析了實(shí)用innerHTML獲取對應(yīng)元素內(nèi)容的使用技巧,需要的朋友可以參考下2015-01-01
Bootstrap jquery.twbsPagination.js動態(tài)頁碼分頁實(shí)例代碼
這篇文章主要介紹了Bootstrap jquery.twbsPagination.js動態(tài)頁碼分頁實(shí)例代碼,需要的朋友可以參考下2017-02-02
Swiper如何實(shí)現(xiàn)兩行四列輪播圖效果實(shí)例
大家應(yīng)該都知道,Swiper是純javascript打造的滑動特效插件,面向手機(jī)、平板電腦等移動終端,下面這篇文章主要給大家介紹了關(guān)于Swiper如何實(shí)現(xiàn)兩行四列輪播圖效果的相關(guān)資料,需要的朋友可以參考下2022-10-10
微信小程序中button去除默認(rèn)的邊框?qū)嵗a
這篇文章主要介紹了微信小程序中button去除默認(rèn)的邊框的實(shí)例代碼,代碼簡單易懂,非常不錯(cuò),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下2019-08-08

