小程序現階段缺陷還不少,在安卓手機上的性能也是很糟糕,估計實用性還不高。
一步一步都是坑,這裏做爲我的踩坑收集用(內含吐槽),也是經驗分享,歡迎issues討論。javascript
要實現頁面數據響應必須經過setData設定值,若是直接設定data裏的值則無頁面響應。
不能像其餘MVVM框架那樣自動響應,無語也無解。php
這也是因爲js對象的key部分必定是字符串形成的。
setDate只支持對靜態key的解析,沒法傳入參數實現動態遍歷。java
有一個數組須要更改其中的值,循環傳入i將無效的,只能是固定數字。json
for(var i=0; i<3; i++){ this.setData({ array[i]:‘hello’ } }) }
若是你照上面這麼寫的話就會報下面的錯誤。小程序
官方的意思就是隻能這樣寫:數組
this.setData({ 'array[1]':‘hello’ } })
不在遍歷中使用setData,能夠先遍歷修改完後再用setData完整賦值完成響應。
由於js裏數組是地址傳遞,也就是說實際上已經修改了原數組,用setData只是爲了響應頁面。app
小程序的頁面都必須在app.json註冊,但這不是隨便登記一下就好了,頁面登記的順序必定是有層級關係的。
若是你把首頁放在了某二級頁面後面,那就會報錯,這個文檔沒寫清楚真心坑爹。框架
"pages": [ "pages/index/index", //一級頁面 "pages/list/list", //二級頁面 "pages/detail/detail", //三級頁面 "pages/msg/msg" //額外頁面 ],
設計時頁面分級要明確,排列按順序,額外頁面(好比提示成功或失敗的頁面)放最後。性能
這個是關閉當前頁跳轉到指定頁的功能,跳到一級頁會致使導航欄消失,而且該一級頁會被當成一次跳轉。
小程序最多五層跳轉,正常一級頁不會算入,但若是一級頁也被當成一次跳轉,那使用幾回後就不能動了,由於五次滿了,很是危險。
這點在新的官方文檔已經說明,並提供wx.switchTab(OBJECT)跳轉到一級頁面,不過因爲wx.switchTab(OBJECT)不能傳參,使用仍是比較有限的。字體
默認header['content-type'] 爲 'application/json',在get請求中沒有問題。
但若是想要發起POST就必須將header['content-type'] 爲 'application/x-www-form-urlencoded',不然就收不到返回數據。
wx.request({ url: 'test.php', //僅爲示例,並不是真實的接口地址 data: yourData, header: { 'content-type': 'application/x-www-form-urlencoded' //這裏必須改 }, success: function(res) { console.log(res.data) } })
這個是改變頁面標題的接口,必須在onShow觸發時才調用。
若是在onLoad觸發時調用,只會一閃而過,而後又變成頁面配置json裏的名字或全局配置json裏的名字。
小程序這樣的設計體驗不是很好,每次都會一閃而過的更名字,若是要避免這種狀況就只能在配置json中設置了,不過這樣是靜態的。
樣式部分的缺陷是比較嚴重的,不支持相鄰兄弟選擇器,不支持級聯選擇器。。。
這個暫時無解,只能說改變一下樣式命名的習慣,使用橫槓鏈接體現層次,雖然這樣盒子多起來會變得很長。
若是使用預處理,好比我用SASS能夠這樣寫,稍微省點力:
.list { padding: 20rpx; &-name { color: red; &-number { color: blue; &-info { font-size: 16rpx; } } } } // 編譯結果 .list { padding: 20rpx; } .list-name { color: red; } .list-name-number { color: blue; } .list-name-number-info { font-size: 16rpx; }
使用button標籤默認是沒法更改樣式,加上類名也會由於優先級問題不能覆蓋原樣式,搞不懂這樣設計的用意,十分不便。
類名 | 觸發時機 |
---|---|
button[type="primary"] |
通常樣式 |
button[type="primary"].button-hover |
按下(彈起)瞬間樣式 |
button[type="primary"]:not([disabled]):active |
按下樣式(可選,沒有則使用上面的做爲按下樣式,[plain]默認有,需覆蓋) |
button[disabled][type=" primary"] |
禁用樣式 |
按下操做觸發順序是:
button[type="primary"] > button[type="primary"].button-hover > button[type="primary"][plain]:not([disabled]):active
button的默認邊框是使用after僞類,新建了一個2倍大小的空白content,設置了border,再縮小爲0.5倍,恰好蓋在元素上面,下面就是默認按鈕的樣式。
這是一種爲了在不一樣設備實現1px的作法,但自己小程序就有rpx啊,還用這雞肋的辦法讓人不解(笑)。
也給更改button樣式一點阻礙,須要把after設置display:none才能去掉邊框。
即便在根元素page上設置了字體大小,rem在不一樣設備上的表現仍是沒法統一。
使用rpx做爲響應式字體的單位,效果比較好,rpx做爲小程序的特性仍是在不一樣設備的表現上仍是很實用的。