小程序开发常用知识总结

1.Tabbar闪烁问题解决思路
用微信官方文档的Tabbar,真机调试,第一次tab切换时会tabbar闪烁。tabbar切换时使用wx.switchTab({url})进行页面切换,第一次切换时微信要打开新的页面,把新页面压人页面栈中,每个新页面要重新渲染tabbar,所以第一次切换时会闪烁。
解决方案:
把整个页面布局封装成组件layout,tabbar 和 navbar 都封装成组件,要切换的页面内容也封装成组件,在layout通过slot控制要显示的组件,tabbar切换只是控制组件的显示,tabbar不需要重新渲染,切换无闪烁。

//layout 组件分为navbar,slot显示activePage, tabbar三部分,通过控制activePage的值控制页面的组件的显示
<view class='layout'>
  <view class='navbar'>
  //customBar有些页面布局需要自定义navbar,由页面定义头部显示。
      <navbar wx:if="{{customBar}}" options="{{navBarOptions}}"
      icon='icon-back' ></navbar> 
  </view>
//计算页面内容显示区域
  <view class='content' style='height:calc(100vh - {{customBarHeight+tabBarHeight}}px );' >
     <slot name="{{activePage}}"></slot>
  </view>
  <view class='footer'>
    <tabBar wx:if="{{customTabbar}}" options="{{tabBarOptions}}"  bindchange="handleTabChange"></tabBar> 
  </view>
</view>
//js控制activePage显示不同组件
 handleTabChange(e,o){
      const context = e.detail;
      let customBar ;
      if(context.page==="mine"){
          customBar = false
      }else{
          customBar =true
      };
      this.setData({
        customBar:customBar,
        activePage:context.page,
        navBarOptions:context.navBarOptions
      })
    }
//slot值控制显示哪个slot
<layout id="page1" customNavBar="{{true}}"  customTabbar="{{true}}" navBarOptions="{{navBarOptions}}" tabBarOptions="{{tabBarOptions}}" >
        <home slot="home"></home>
        <shopCar slot="shopCar"></shopCar> 
        <mine slot="mine"></mine>
</layout>

2.小程序生命周期,Pape生命周期,组件component生命周期
小程序应用生命周期:APP()只能在app.js中调用,只能调用一次
1.onLaunch
小程序初始化完成时触发,全局只触发一次。
2.onShow
小程序启动,或从后台进入前台显示时触发。
3.onHide
小程序从前台进入后台时触发。
4.onError
小程序发生脚本错误或 API 调用报错时触发。
5.onPageNotFound
小程序发生脚本错误或 API 调用报错时触发。
冷启动:第一次打开小程序或者小程序销毁后再次打开,此时小程序需要重新加载启动,即冷启动。会执行onLaunch 、onShow
冷启动:如果用户已经打开过小程序,在一定时间内再次打开,小程序并未销毁,只是从后台状态变为前台状态,称为热启动,执行onShow,不执行onLaunch。
后台: 点击左上角关闭,或者按了设备 Home 键离开微信,并没有直接销毁,而是进入后台状态,小程序还可以再运行一段时间会,执行onHide。
前台:展示给用户就是前台状态,再次打开微信或再次打开小程序,会从后台状态进入前台状态。
官方文档:
https://developers.weixin.qq.com/miniprogram/dev/reference/api/App.html
https://developers.weixin.qq.com/miniprogram/dev/framework/runtime/operating-mechanism.html#%E5%B0%8F%E7%A8%8B%E5%BA%8F%E5%90%AF%E5%8A%A8
Pape生命周期
小程序展示某个页面的生命周期:
1.onLoad
页面加载时触发。一个页面只会调用一次
2.onShow
页面显示/切入前台时触发。
3.onReady
页面初次渲染完成时触发。一个页面只会调用一次,代表页面已经准备妥当,可以和视图层进行交互
4.onHide
页面隐藏/切入后台时触发。
5.onUnload
页面卸载时触发。如wx.redirectTowx.navigateBack到其他页面时
官方文档:https://developers.weixin.qq.com/miniprogram/dev/reference/api/Page.html
组件component生命周期
1.created
组件实例刚刚被创建好时, created 生命周期被触发
2.attached
在组件完全初始化完毕、进入页面节点树后, attached 生命周期被触发
detached
3.在组件离开页面节点树后, detached 生命周期被触发
在组件中也可以在pageLifetimes定义页面生命周期的回调

Component({
  lifetimes: {
    created: function() {
      // 组件实例刚刚被创建好
    },
    attached: function() {
      // 在组件实例进入页面节点树时执行
    },
    detached: function() {
      // 在组件实例被从页面节点树移除时执行
    },
  },
//组件所在页面的生命周期
  pageLifetimes: {
    show: function() {
      // 页面被展示
    },
    hide: function() {
      // 页面被隐藏
    },
    resize: function(size) {
      // 页面尺寸变化
    }
  }
})

官方文档:https://developers.weixin.qq.com/miniprogram/dev/framework/custom-component/lifetimes.html
4.组件封装思路
1.小程序开发时,经常需要封装组件,根据需求,找出可以复用的部分封装成组件。
2.根据需求分析,找出需要传入组件的数据(组件需要显示的数据或要控制显示的状态数据),在properties中定义需要接受的数据
3.考虑组件与页面的交互,定义需要触发页面的方法,用triggerEvent调用页面或父组件方法并传参,例如:

<good options="{{item}}"  bind:addCart="addCart" style="width:100%;"></good>

//组件WXML代码
<button bindtap="onAddingToCartTap" ></button>
//组件js代码
properties: {
    options:{
      type:Object
    }
 },
onAddingToCartTap: function (events) {
  //触发父组件方法
   this.triggerEvent('addCart', events)
}
       

5.封装微信小程序的数据请求
小程序使用wx.request发起 HTTPS 网络请求,使用promise封装,在appjs中定义request方法,返回promise对象,这样页面可以通过const app = getApp(); app.request使用

//请求方法
  //params 请求参数 以对象方式传递 必填
  //noShowLoding 为true则代表不要loading(针对某些需要频繁的请求),若需要loading 则不填。
  request(params, noShowLoding) {
    let url = ""; //接口请求地址
    if (!noShowLoding) {
      wx.showLoading({
        title: '加载中',
      })
    }
    return new Promise(function (resolve, reject) {
      wx.request({
        url: url + "?token=" + wx.getStorageSync('token'),
        data: params,
        method: 'POST', // OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT
        header: {
          'content-type': 'application/json'
        }, // 设置请求的 header
        success: function (res) {
          wx.hideLoading()
          if (res.statusCode == 200) {
            let data = res.data;
            if (data.response) {
              resolve(res.data);
            } else {
              console.log(data)
              if (data) {
                wx.showToast({
                  title: data.error.errorInfo,
                  icon: 'none',
                  duration: 2000
                })
              }
            }
          }
        },
        fail: function () {
          wx.hideLoading();
          wx.showToast({
            title: '网络连接失败',
            icon: 'none',
            duration: 2000
          })
        },
        complete: function () {
   
        }
      })
    })

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,761评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,953评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,998评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,248评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,130评论 4 356
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,145评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,550评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,236评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,510评论 1 291
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,601评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,376评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,247评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,613评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,911评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,191评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,532评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,739评论 2 335

推荐阅读更多精彩内容