午夜视频在线网站,日韩视频精品在线,中文字幕精品一区二区三区在线,在线播放精品,1024你懂我懂的旧版人,欧美日韩一级黄色片,一区二区三区在线观看视频

分享

微信小程序入門教程--列表渲染多層嵌套循環(huán)及wx:key的使用

 昵稱53785162 2018-04-26

前言

入門教程之列表渲染多層嵌套循環(huán),目前官方的文檔里,主要是一維數(shù)組列表渲染的案例,還是比較簡單單一,給剛?cè)腴T的童鞋還是無從入手的感覺。

<view wx:for="{{items}}">
  {{index}}: {{item.message}}
</view>

還有一個(gè)九九乘法表把數(shù)據(jù)直接寫到wxml里的,并不是動(dòng)態(tài)二維數(shù)組的列表渲染。

<view wx:for="{{[1, 2, 3, 4, 5, 6, 7, 8, 9]}}" wx:for-item="i">
  <view wx:for="{{[1, 2, 3, 4, 5, 6, 7, 8, 9]}}" wx:for-item="j">
    <view wx:if="{{i <= j}}">
      {{i}} * {{j}} = {{i * j}}
    </view>
  </view>
</view>

那么今天,我們主要來講講動(dòng)態(tài)多維數(shù)組和對象混合的列表渲染。

''

講解

何為多維數(shù)組和對象混合,給個(gè)很簡單的例子

 twoList:[{
            id:1,
            name:'應(yīng)季鮮果',
            count:1,
            twodata:[{
                'id':11,
                'name':'雞脆骨'
            },{
                'id':12,
                'name':'雞爪'
            }]
     },{
            id:2,
            name:'精致糕點(diǎn)',
            count:6,
            twodata:[{
                'id':13,
                'name':'羔羊排骨一條'
            },{
                'id':14,
                'name':'微辣'
            }]
     }]

上述例子就是一個(gè)數(shù)組,這都是我們?nèi)粘i_發(fā)過程中,經(jīng)常會(huì)碰到的JSON格式,
該數(shù)組的元素是有對象,對象又分為屬性,屬于數(shù)組對象混合,可能對于剛接觸小程序的童鞋,碰到這種數(shù)組對象混合的就會(huì)發(fā)難了。

一層循環(huán)

    oneList:[{
            id:1,
            name:'應(yīng)季鮮果',
            count:1
     },{
            id:2,
            name:'精致糕點(diǎn)',
            count:6
     },{
            id:3,
            name:'全球美食烘培原料',
            count:12
     },{
            id:4,
            name:'無辣不歡生猛海鮮',
            count:5
     }]

以上數(shù)組對象混合JSON,是測試只有一層循環(huán)的,我們看看在wxml里怎么循環(huán),我們先看一下要循環(huán)渲染到頁面上的效果圖。

''
<view wx:for="{{oneList}}"  wx:key="id">
    {{index+1}}、{{item.name}}
</view>

我們可以看到,這里直接用兩個(gè)花括號來給view 循環(huán)列表,注意強(qiáng)調(diào)一下,請記得一下要用 兩個(gè)花括號數(shù)據(jù)起來,如果不包起來,view也會(huì)循環(huán)出來,但并不是自己要循環(huán)的數(shù)據(jù),而且是給了一個(gè)假象給你以為是有循環(huán)了,這里開發(fā)工具有點(diǎn)坑人的感覺,這個(gè)還需要多細(xì)心點(diǎn),這里記住一點(diǎn),只要是有數(shù)據(jù)的,就需要花括號。
另外默認(rèn)數(shù)組的當(dāng)前項(xiàng)的下標(biāo)變量名默認(rèn)為index,數(shù)組當(dāng)前項(xiàng)的變量名默認(rèn)為item,同時(shí)我這里也順道演示了如何使用數(shù)組變量名和下標(biāo)。

二層循環(huán)

''

JSON代碼

     twoList:[{
            id:1,
            name:'應(yīng)季鮮果',
            count:1,
            twodata:[{
                'id':11,
                'name':'雞脆骨'
            },{
                'id':12,
                'name':'雞爪'
            }]
     },{
            id:2,
            name:'精致糕點(diǎn)',
            count:6,
            twodata:[{
                'id':13,
                'name':'羔羊排骨一條'
            },{
                'id':14,
                'name':'微辣'
            }]
     },{
            id:3,
            name:'全球美食烘培原料',
            count:12,
            twodata:[{
                'id':15,
                'name':'秋刀魚'
            },{
                'id':16,
                'name':'錫箔紙金針菇'
            }]
     }]

wxml代碼

        <view class="pad10" wx:for="{{twoList}}" wx:key="id">
            <view>
                {{index+1}}、{{item.name}}
            </view>
            <view wx:for="{{item.twodata}}" wx:for-item="twodata" wx:key="id">
                ----{{twodata.name}}---{{item.name}}
            </view>
        </view>

以上截圖和代碼是二層嵌套內(nèi)容。
我們在wxml代碼里,很明顯的看到有兩個(gè)wx:for的控制屬性,在二層循環(huán)的JSON代碼里,我們看每個(gè)單數(shù)組里還有一級數(shù)據(jù)twodata,這里是需要再循環(huán)渲染到頁面上的,在第一層數(shù)據(jù)里,直接再循環(huán)item.twodata即可,請記得一定要帶上花括號。
在第二層的循環(huán)里,建議把當(dāng)前項(xiàng)的變量名改為其他,即在wxml代碼里看到的wx:for-item="twodata",因?yàn)槟J(rèn)的當(dāng)前項(xiàng)的變量名為item,如果不改換其他的話,你是拿不到第一層循環(huán)的數(shù)據(jù)的,因?yàn)楸坏诙拥淖兞棵采w了。
所以我們在wxml代碼里,在第二層循環(huán)時(shí),可以看到還可以循環(huán)第一層的值,即----{{twodata.name}}---{{item.name}}。

三層以上的多層循環(huán)

三層以上的多層的數(shù)組循環(huán),在原理上同二層循環(huán)是一樣的,能理解了二層數(shù)組循環(huán),對于三層以及三層以上都能得心應(yīng)用的。
需要注意的地方,那就是老生常談的問題了,數(shù)據(jù)需要用花括號括起來,從第二層起,把默認(rèn)的當(dāng)前項(xiàng)的變量名改為其他,例如wx:for-item="twodata",還有細(xì)心再細(xì)心。

wx:key唯一標(biāo)識(shí)符

為什么會(huì)有wx:key的出現(xiàn)呢,官方給的解釋是,如果列表中項(xiàng)目的位置會(huì)動(dòng)態(tài)改變或者有新的項(xiàng)目添加到列表中,并且希望列表中的項(xiàng)目保持自己的特征和狀態(tài)(如 input 中的輸入內(nèi)容,switch 的選中狀態(tài)),需要使用 wx:key 來指定列表中項(xiàng)目的唯一的標(biāo)識(shí)符。
當(dāng)數(shù)據(jù)改變觸發(fā)渲染層重新渲染的時(shí)候,會(huì)校正帶有 key 的組件,框架會(huì)確保他們被重新排序,而不是重新創(chuàng)建,以確保使組件保持自身的狀態(tài),并且提高列表渲染時(shí)的效率。
在開發(fā)過程中,wx:key的作用對于項(xiàng)目作用是非常大的,如果從文字上無法理解的童鞋,可以到github clone demo到微信開發(fā)工具里,親自體驗(yàn)下。

''

我們看到這個(gè)GIF動(dòng)畫圖,這里有一個(gè)switch的開啟狀態(tài),switch的狀態(tài)是在標(biāo)題為羔羊排骨一條的,在對這個(gè)數(shù)組增加數(shù)據(jù)時(shí),這個(gè)switch的狀態(tài)并不跟隨著羔羊排骨一條,并不保持自己的狀態(tài)。

那我們再看另一個(gè)例子,使用了wx:key唯一標(biāo)識(shí)符。

''

這個(gè)GIF動(dòng)畫圖,也是點(diǎn)擊開啟了switch的狀態(tài),唯一有不同的地方,就是在新增數(shù)據(jù)時(shí),是保持著自己的狀態(tài)的。
相信通過這兩個(gè)小例子,對wx:key唯一標(biāo)識(shí)符應(yīng)該也有所了解啦,想要提升技術(shù),就要多折騰,自己在小程序里,寫個(gè)wx:forwx:key 體會(huì)下。

還有一個(gè)需要注意的地方,我們先看看以下代碼

<view class="pad10" wx:for="{{twoList}}" wx:key="id">
</view>

wx:key="id",我們看到wx:key里的值并不需要花括號的,是的,這里是比較特別的地方,不需要花括號,同時(shí)也不需要參數(shù)名,需要是雖然數(shù)據(jù)里的一個(gè)字段名。

結(jié)束語

今天我們講了列表渲染,官方給的文檔還是比較簡單單一,我們這里更深入的講了數(shù)組的一層、二層以及多層循環(huán),還有wx:key唯一標(biāo)識(shí)符的使用方法和注意事項(xiàng)。

相信在小程序推出公測之后,很多小伙伴都已經(jīng)抓緊申請注冊小程序了。在開發(fā)階段中也碰到了很多的問題,例如wx.request數(shù)據(jù)請求不成功,在數(shù)組操作時(shí),不知道如何往數(shù)組里push數(shù)據(jù),input如何監(jiān)聽用戶輸入的狀態(tài),css的background-image無法獲取本地資源等等,本博客會(huì)出一個(gè)專題,給碰到這些問題的小伙伴解決思路。

demo github地址:
https://github.com/bluefox1688/wxapp_study



作者:藍(lán)狐鍋鍋
鏈接:https://www.jianshu.com/p/87cdf985b2b9
來源:簡書

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多