微信给小程序提供的环境成为宿主环境,我个人理解(不一定对,对宿主环境的真正理解我觉得需要知道小程序的详细框架原理以及和微信APP之间的联系):宿主环境包括了两大线程以及其他的一些代码(比如API定义函数、将小程序代码包注入宿主环境的代码等等)
通信模型
Native是微信客户端,逻辑层和渲染层是通过两个线程来管理,每个页面对应一个webView线程。
数据驱动:
类似于react和vue,只要改变数据,页面就会自动更新视图。
渲染层将wxml先转换成js对象,这个对象等价于一棵dom树,之后进行渲染,其中,逻辑层将数据通过Native发送给渲染层,通过比较差异再重新渲染差异的部分
问题:1:小程序既然不支持dom,那怎么处理得到的js对象呢,web是使用dom API来实现的,小程序怎么实现的呢?通过Native?
2:小程序求差是在哪个线程执行的?是webView吗?类似于react里的diff,是在setState()时执行render(),求出虚拟dom,然后进行diff比较,之后找到patch,再根据patch来更新真实的dom
APP和Pages:
- APP:
宿主环境提供了App()构造器来注册一个程序App,要写在app.js里面:App({}),App实例是单例对象,其他页面可以使用getApp()来获取此对象,比如使用全局变量globalValue的时候。
App({})参数对象:
App({
onLaunch: function(options){
},//小程序初始化完成后触发,只执行一次
onShow: function(options){
},//后台切换到前台触发
onHide: function(){
},//前台切换到后台触发
onError: function(msg){
},//脚本错误或调用api失败触发
globalValue: {
} //全局变量的存储位置
})