您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關(guān)微信小程序中使用async/await語(yǔ)法的示例的內(nèi)容。小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過(guò)來(lái)看看吧。
微信小程序中使用async/await語(yǔ)法的示例
開(kāi)發(fā)微信小程序離不開(kāi)“頁(yè)面渲染”,對(duì)于初學(xué)者來(lái)說(shuō)很難理解小程序里的“頁(yè)面渲染”是什么、怎么用?
而學(xué)過(guò) vue 的同學(xué)來(lái)說(shuō),這個(gè)就比較熟悉了,實(shí)際上就是數(shù)據(jù)綁定頁(yè)面渲染。
那么關(guān)于頁(yè)面渲染最重要的是列表渲染和條件渲染這兩塊,先來(lái)看看幾個(gè)簡(jiǎn)單的例子。
下面是個(gè)“列表渲染”的例子:
<view wx:for="{{array}}"> {{index}}: {{item.message}} </view>
Page({ data: { array: [{ message: 'foo', }, { message: 'bar' }] } })
上面的例子可以看出,默認(rèn)數(shù)組的當(dāng)前項(xiàng)的下標(biāo)變量名默認(rèn)為 index,數(shù)組當(dāng)前項(xiàng)的變量名默認(rèn)為 item。當(dāng)然,使用 wx:for-item 可以指定數(shù)組當(dāng)前元素的變量名,使用 wx:for-index 可以指定數(shù)組當(dāng)前下標(biāo)的變量名,如下:
<view wx:for="{{array}}" wx:for-index="idx" wx:for-item="itemName"> {{idx}}: {{itemName.message}} </view>
下面是個(gè)“條件渲染”的例子:
<view wx:if="{{condition}}">True</view>
Page({ data: { condition: true } })
上面的例子說(shuō)明,當(dāng) condition 為真時(shí),頁(yè)面渲染上面的 view 標(biāo)簽。當(dāng)然也可以用 wx:elif 和 wx:else 來(lái)添加一個(gè) else 塊,如下:
<view wx:if="{{length > 5}}">1</view> <view wx:elif="{{length > 2}}">2</view> <view wx:else>3</view>
下面接入正題,探索文章題目的疑問(wèn)
一、 列表渲染中的 wx:key 有什么作用
其實(shí)初次看 官方文檔 可能會(huì)對(duì) wx:key 有點(diǎn)懵,官方解釋是這樣的:
根據(jù)我多年看文檔經(jīng)驗(yàn),一般我看不懂的可以忽略不重要的文字,只需關(guān)注重點(diǎn),例如上圖的文字加粗部分,因此,一開(kāi)始我選擇不寫(xiě) wx:key 這個(gè)屬性。然而在開(kāi)發(fā)過(guò)程中寫(xiě)多了列表渲染(而沒(méi)有加 wx:key)之后,控制臺(tái)會(huì)報(bào)很多的 wx:key 的警告,對(duì)于有點(diǎn)代碼潔癖的我看起來(lái)很不爽,但又苦于不清楚 wx:key 的真正作用,于是自創(chuàng)了一個(gè)解決辦法,那就是在每個(gè)列表渲染后面加上 wx:key="{{index}}",類似下面這樣:
<view wx:for="{{array}}" wx:key="{{index}}"> {{item}} </view>
于是我驚奇地發(fā)現(xiàn)警告統(tǒng)統(tǒng)不見(jiàn)了,也沒(méi)有其他負(fù)面影響,于是我就這樣用了大半年。
然而,半年前我做的一個(gè)項(xiàng)目里面有個(gè)列表渲染需要試試獲取用戶頭像和昵稱,于是我之前的做法不管用了,每次獲取到的用戶信息跟當(dāng)前內(nèi)容不對(duì)應(yīng),并且會(huì)發(fā)生錯(cuò)亂。于是我重新理解了一遍 wx:key,結(jié)合下面的例子,我似乎明白了:
<switch wx:for="{{objectArray}}" wx:key="unique" style="display: block;"> {{item.id}} </switch>
Page({ data: { objectArray: [ {id: 5, unique: 'unique_5'}, {id: 4, unique: 'unique_4'}, {id: 3, unique: 'unique_3'}, {id: 2, unique: 'unique_2'}, {id: 1, unique: 'unique_1'}, {id: 0, unique: 'unique_0'}, ] } })
其實(shí),wx:key 是用來(lái)綁定當(dāng)前列表中的項(xiàng)目特征的,也就是說(shuō),如果列表是動(dòng)態(tài)更新的,那么 wx:key 的作用是保持原有項(xiàng)目的整個(gè)狀態(tài)不變。
結(jié)合上面的例子,我們可以知道,對(duì)于列表數(shù)組是個(gè)對(duì)象數(shù)組,那么 wx:key 屬性直接寫(xiě)對(duì)應(yīng)的唯一的屬性名就可以了,比如上面的 wx:key="unique", 或者 wx:key="id" 也是可以的,只要保持屬性是唯一值就行了,有點(diǎn)類似頁(yè)面標(biāo)簽里面的 id 屬性在頁(yè)面是唯一的。
對(duì)于列表數(shù)組是個(gè)基本類型數(shù)組,那么直接寫(xiě) wx:key="*this" 就可以了,如下:
<block wx:for="{{[1, 2, 3]}}" wx:key="*this"> <view>{{index}}:</view> <view>{{item}}</view> </block>
如果很明確自己的列表渲染是個(gè)靜態(tài)列表,那么你可以像我一開(kāi)始那樣做,加個(gè) wx:key="{{index}}" 就可以了
反之,如果是個(gè)動(dòng)態(tài)列表,那么就得在數(shù)組里找到唯一的鍵值,放在 wx:key 里面
當(dāng)然如果你無(wú)視警告,也不影響功能,不加也行
其實(shí)我們用條件渲染更多地在用 wx:if 而不是 hidden,因?yàn)榍罢呖梢酝卣?,后者缺乏一定的邏輯。然而他們到底有什么區(qū)別呢?
官方文檔 是這樣描述的:
上圖中,我們大概可以了解到,如果需要頻繁切換狀態(tài),用 hidden,否則用 wx:if。
也就是說(shuō),wx:if 能夠?qū)崟r(shí)創(chuàng)建渲染組件或銷毀組件,而且當(dāng)他為真時(shí)才會(huì)創(chuàng)建,初始為假時(shí)什么也不做,由真變?yōu)榧贂r(shí)則進(jìn)行銷毀。所以頻繁切換他是一個(gè)比較耗性能舉動(dòng)。而 hidden 則代表頁(yè)面初始渲染時(shí)就會(huì)把該組件渲染在頁(yè)面上,值的真假只是控制其顯示隱藏罷了。頁(yè)面不銷毀,則該組件也不會(huì)被銷毀。
明白了這一點(diǎn),你會(huì)發(fā)現(xiàn),從我們開(kāi)發(fā)者的角度來(lái)說(shuō),靈活使用這兩個(gè)條件判斷會(huì)事半功倍。
下面列舉幾種使用場(chǎng)景給開(kāi)發(fā)者參考:
<view class="load-event" hidden="{{!isAdd}}">加載中……</view> <view class="load-event" hidden="{{!isAdded && isMore}}">沒(méi)有更多了</view>
上面代碼是一個(gè)上拉加載動(dòng)畫(huà)顯示與隱藏組件,可以看到用的是 hidden,因?yàn)樗且粋€(gè)需要頻繁切換的組件。
<block wx:if="{{node.name === 'p'}}"> <view class="{{node.attrs.class}}" data-index="{{index}}" bindtap="toText"> <text selectable="true">{{node.children[0].text}}</text> </view> </block> <block wx:if="{{node.name === 'img'}}"> <image class="{{node.attrs.class}}" src="{{node.attrs.src}}"></image> </block> <block wx:if="{{node.name === 'video'}}"> <video class="{{node.attrs.class}}" src="{{node.attrs.src}}"></video> </block>
上面代碼展示的是渲染文字還是圖片或者是視頻,只展示其中的一個(gè)那么用 wx:if 最佳。
下面是一個(gè)自定義 input 組件:
<view wx:if="{{isInput}}" class="show-input"> <view class="input-item"> <input class="item-input" bindconfirm="onSend" bindinput="inputHandle" bindblur="hideInput"></input> <view class="send-btn" catchtap="onSend">發(fā)送</view> </view> </view>
其功能是點(diǎn)擊評(píng)論按鈕能實(shí)時(shí)顯示輸入框,否則隱藏。這里為什么用 wx:if 呢?因?yàn)槲蚁M@示時(shí)是新的 input 組件,不是之前渲染好的,這樣如果我剛輸入完文字,再次評(píng)論不會(huì)出現(xiàn)上一次的文字殘留。
有時(shí)我們需要提前渲染好里面的子組件,那么要用 hidden,否則待顯示時(shí)需要加上渲染的時(shí)間
通常情況下,我在隱藏的時(shí)候都不需要該組件的話,那就用 wx:if
如果需要在頁(yè)面中點(diǎn)擊切換的渲染,那么考慮小程序性能問(wèn)題,還是用 hidden 為好
1、 <block> 這個(gè)元素在列表和條件渲染上是很好用的,不過(guò)要注意不要在這個(gè)標(biāo)簽上綁定其他屬性,比如 data- 或者綁定事件 bindtap。下面是一個(gè)反例:
<block wx:if="{{true}}" data-id="1" bindtap="tapName"> <view>view1</view> <view>view2</view> </block>
上面的代碼里,在 js 中定義綁定事件后,你會(huì)發(fā)現(xiàn)不會(huì)執(zhí)行。原因就在 <block> 元素在渲染頁(yè)面后并不會(huì)存在,他不是個(gè)組件,不會(huì)渲染在頁(yè)面樹(shù)節(jié)點(diǎn)里面,所以在他上面綁定的事件或者屬性也不會(huì)有效。
2、 當(dāng) wx:for 的值為字符串時(shí),會(huì)將字符串解析成字符串?dāng)?shù)組;另外,花括號(hào)和引號(hào)之間如果有空格,將最終被解析成為字符串,請(qǐng)看下面的例子:
<view wx:for="array"> {{item}} </view>
等同于
<view wx:for="{{['a','r','r','a','y']}}"> {{item}} </view>
<view wx:for="{{[1,2,3]}} "> {{item}} </view>
等同于
<view wx:for="{{[1,2,3] + ' '}}"> {{item}} </view>
感謝各位的閱讀!關(guān)于“微信小程序中使用async/await語(yǔ)法的示例”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。