小程序實戰注意事項

一、backgroundImage不支持本地圖片引入

  • 使用網絡路徑;
  • 使用base64;
.bg{
    background-image:url(data:image/jpeg;base64,xxxxxx);
}
  • 使用image組件替代;

二、阻止事件冒泡

正常事件綁定使用的是bindtap,但是該方法無法阻止事件冒泡,這樣就會觸發父元素綁定的事件,小程序提供另一種方法來解決該問題,使用catchtap事件替換bindtap即可;其他事件同理,將bind換成catch。

常見結構:

<navigator url='/pages/detail?id=10'>/*點擊跳轉商品詳情*/
     <image src="xxx"></image>
     <view>豪華雙人床</view>
     <view>這床又大又軟</view>
     <button catchtap='add'>加入購物車</button>/*點擊添加*/
</navigator>

三、事件傳參 target or currentTarget

target指觸發事件的目標節點,currentTarget指綁定事件的節點,當事件綁定節點包含子節點時,使用currentTarget更加方便;

wxml:
/*刪除按鈕結構*/
<view bindtap="delete" data-id="1">
     <image src="del_icon.png"></image>
     <text>刪除</text>
</view>

js:
Page({
  delete(e){
        e.currentTarget//必定是view節點 可以獲取當前節點上攜帶的id
        e.target//如果點擊了內部image則e.target是image
  }
})

四、小程序入口頁面獲取參數

啟動小程序時參數通過wx.getLaunchOptionsSync().query訪問,啟動之后進入通過options訪問;

/pages/index/index
Page({
  onLoad(options){
      console.log(options.id)//啟動之后再次進入時獲取所傳id參數(常見為點擊分享鏈接進入)
      let options = wx.getLaunchOptionsSync();
      console.log(options.query.id)//獲取啟動時所傳id參數
  }
})

五、獲取用戶信息

調用 wx.getUserInfo 接口,無法彈出授權詢問框,默認調用失敗,如果用戶曾經授權過,則可成功調用此方法,否則需要使用 button 組件,并將 open-type 指定為 getUserInfo 類型,獲取用戶基本信息。

wx.getSetting({
     success: res => {
           if (res.authSetting['scope.userInfo']) {//曾經授權過
                this.getUserInfo();//調用相關接口獲取用戶信息
                this.setData({
                   canIUseUserInfo: true
                })
            }else{
                this.setData({
                   canIUseUserInfo: false//否則顯示button讓用戶點擊授權
                })
            }
      }
})

六、textarea遮擋問題

textarea屬于原生組件,cover-view可以覆蓋在原生組件之上,注意cover-view只能嵌套cover-viewcover-imagebutton。

七、去除button邊框

button組件邊框是偽元素:

button::after{ display: none;}

八、開發版真機調試

后臺服務器搭建后,從開發者工具上設置不校驗域名,就可以直接訪問服務器ip或域名,但是用手機預覽的時候無法進行數據的交互,用手機掃描預覽后,需要點擊小程序右上角---打開調試,然后重啟即可!

九、掃碼調試(掃描二維碼進入開發調試)

在開發的過程中可能會有這樣的場景,要求后臺生成小程序碼,用微信掃描小程序碼帶參數進入一個頁面,但是生成的小程序碼是線上的正式版本,小程度還沒有上線 沒有辦法調試;在開發工具中點擊對應按鈕選擇小程序碼,即可模擬整個過程。


image.png

十、getCurrentPages訪問頁面實例,進行頁面傳值

對于頁面之間傳值,最簡陋的方式是借助本地存儲,一個頁面存,其他頁面取,也可以使用狀態管理工具,但是會有種矯枉過正的感覺。大部分場景都是父子頁面傳值,根據實際情況可以使用小程序提供的方式,一級=>二級(路徑后攜帶參數),二級=>一級(getCurrentPages訪問上級頁面實例)

//列表頁
Page({
  data:{
    list:[]
  }
})
//點擊按鈕進入添加頁面
Page({
  add(){
      let pages=getCurrentPages();//獲取頁面棧中所有頁面實例;
      let page_list=pages[pages.length-2]//獲取上個頁面實例 length-1指最后一個頁面也就是當前頁面;
      page_list.setData({
          list:pages_list.data.list.concat("新內容")
      })
  }
})

十一、長列表渲染setData數據量大時,導致卡頓(數據詞典)

小程序數據通信需要Native 的 JSBrigde 做中轉,橋接渲染層和邏輯層,每當小程序視圖數據需要更新時,邏輯層會調用小程序提供的 setData 方法將數據從邏輯層傳遞到視圖層,經過一系列渲染步驟之后完成UI視圖更新,當setData傳遞數據量比較大的時候,就會引發渲染性能問題。減少setData數據量和調用頻率是目前開發者可以主動干預的步驟。

  • 數據詞典
Page({
  data:{
    person:{
      name:"veb",
      age:20
    },
    list:[{
       title:"西瓜"
    }]
  },
  changeName(){
    //常規寫法 取出person修改name字段,然后setData更新頁面
    let person=this.data.person;
    person.name="Veblen";
    this.setData({//傳入整個修改后的對象
      person
    })
    //數據詞典
    this.setData({//通過數據關系 更新指定字段
      'person.name':'Veblen'
    })
    //同理
    this.setData({//通過數據關系 更新指定字段
      'list[0].title':'Veblen'
    })
  }
})
  • 長列表優化
    將數據劃分為二維數組結構
Page({
  data:{
    list:[]
  },
  getNextPage(){
    let newList=[];
    //常規寫法  list:[{},{},{}]
    this.setData({
      list:this.data.list.concat(newList)
    })
    // 優化 list:[[{},{}],[{},{}]]
    let index=this.data.list.length-1;
    this.setData({//指定索引位置賦值新數組,索引為length指定最后一個元素之后的位置
      ['list['+index+']']:newList//注意:對象屬性為表達式時需要用[]包裹
    })
  }
})

加油!

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,739評論 6 534
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,634評論 3 419
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,653評論 0 377
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,063評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,835評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,235評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,315評論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,459評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,000評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,819評論 3 355
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,004評論 1 370
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,560評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,257評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,676評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,937評論 1 288
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,717評論 3 393
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,003評論 2 374