小程序生命周期
小程序生命周期分为应用、页面和组件三个部分
- 应用的生命周期
App() 函数用来注册一个小程序。接受一个 Object 参数,其指定小程序的生命周期回调等。
App() 必须在 app.js 中调用,必须调用且只能调用一次。
用户首次打开小程序,触发 onLaunch 方法(全局只触发一次)。
小程序初始化完成后,触发 onShow 方法,监听小程序显示。
小程序从前台进入后台,触发 onHide 方法。
小程序从后台进入前台显示,触发 onShow 方法。
onError // 错误监听函数。小程序发生脚本错误,或者 api 调用失败时触发,会带上错误信息
- 页面的生命周期
Page(Object)函数用来注册一个页面。接受一个 Object 类型参数,其指定页面的初始数据、生命周期回调、事件处理函数等。
onLoad:// 生命周期回调—监听页面加载
onReady:// 生命周期回调—监听页面初次渲染完成
onShow:// 生命周期回调—监听页面显示
onHide: // 生命周期回调—监听页面隐藏
onUnload: // 生命周期回调—监听页面卸载
onPullDownRefresh: // 监听用户下拉动作
onReachBottom: // 页面上拉触底事件的处理函数
onShareAppMessage: // 用户点击右上角转发
onPageScroll: // 页面滚动触发事件的处理函数
onResize:// 页面尺寸改变时触发
onTabItemTap: // 当前是 tab 页时,点击 tab 时触发
- 组件的生命周期
组件的生命周期,指的是组件自身的一些函数,这些函数在特殊的时间点或遇到一些特殊的框架事件时被自动触发。
其中,最重要的生命周期是 created attached detached ,包含一个组件实例生命流程的最主要时间点。
created 组件实例化,但节点树还未导入,因此这时不能用setData
attached 组件初始化完毕,节点树完成,可以用setData渲染节点,但无法操作节点
ready 组件布局完成,这时可以获取节点信息,也可以操作节点
moved 组件实例被移动到树的另一个位置
detached 组件实例从节点树中移除
组件所在页面的生命周期, 指的是那些并非与组件有很强的关联,但有时组件需要获知,以便组件内部处理的生命周期,在 pageLifetimes 定义段中定义。
show 组件所在的页面被展示时执行
hide 组件所在的页面被隐藏时执行
resize 组件所在的页面尺寸变化时执行
2.小程序数据绑定
微信小程序是通过状态模式-单向数据流的方式来实现数据绑定的。
对象状态化,只要对象状态发送变化,就通知页面更新视图元素。 通过以下三个步骤实现:
识别哪个UI元素被绑定了相应的对象。
监视对象状态的变化。
将所有变化传播到绑定的视图上。
3. 小程序路由,简述五个路由的区别
wx.navigateTo():保留当前页面,跳转到应用内的某个页面。但是不能跳到 tabbar 页面
wx.redirectTo():关闭当前页面,跳转到应用内的某个页面。但是不允许跳转到 tabbar 页面
wx.switchTab():跳转到 tabBar 页面,并关闭其他所有非 tabBar 页面
wx.navigateBack()关闭当前页面,返回上一页面或多级页面。可通过 getCurrentPages() 获取当前的页面栈,决定需要返回几层
wx.reLaunch():关闭所有页面,打开到应用内的某个页面
4.小程序登录流程
微信小程序端调用wx.login,获取登录凭证(code),并调用接口,将code发送到第三方客户端,第三方服务器端调用接口,用code换取session_key和openid,第三方服务器端拿到请求回来的session_key和openid,先留着,不能给客户端;然后用操作系统提供的真正随机数算法生成一个新的session,叫3rd_session,将3rd_session作为key,微信服务端返回的session_key和openid作为值,保存起来。
小程序每次请求都将3rd_session放在请求头里,第三方服务端解析判断合法性,并进行正常的逻辑处理。
wx.getUserInfo获取用户信息,需要后台解密的时候,需要在wx.login里面进行,否则code不能匹配成功。
常见问题
1、rpx:小程序的尺寸单位,规定屏幕为750rpx,可适配不同分辨率的屏幕。
2、本地资源无法通过wxss获取
RE:background-image:可以使用网络图片,或者base64,或者使用标签
3、wx.navigateTo无法打开页面
RE:一个应用同时只能打开5个页面,请避免多层级的交互方式,或使用wx.redirectTo
4、tabBar设置不显示
RE:①tabBar的数量少于2项或超过5项都不会显示;
②tabBar写法错误导致不显示;
③tabBar没有写pagePath字段(程序启动后显示的第一个页面)