宝哥软件园

深度wepy源代码:分析wepy的工作原理

编辑:宝哥软件园 来源:互联网 时间:2021-12-09

在分析源代码之前,让我们回顾一下wepy的用法:

!-applet portal app . wpy-脚本从“wepy”导入wepy;默认类扩展wepy.app {......................

我们介绍了wepy-cli如何编译wpy文件,上面说compile-script . js处理脚本代码时,会添加wepy初始化代码。然后编译dist目录中的文件,如下所示:

//dist/app.jsApp(必选(')。/NPM/wepy/lib/wepy . js '). default . $ createApp(_ default,{ });//dist/pages/index.js Page(必选('。/./NPM/wepy/lib/wepy . js '). default . $ createPage(Index,' pages/Index ');可以看出主要调用$createApp和$createPage方法。在看这两种方法之前,我们先来看看wepy的目录结构,这样可以更好的理解下面的分析。

wepy目录结构

—wepy—src—app . js全局app逻辑、请求优化、promisify API、拦截器功能等。— Base.js定义了$createApp和$createPage —— component.js组件逻辑、脏值检查、组件通信等方法。—事件. js事件方法— Mixin.js混合方法— Native.js为空,代码用于重新定义app.js中的wx接口— Page.js继承组件,对page util.js工具方法wepy.js入口文件测试进行了一些优化.

createApp和createPage

$createApp

//dist/app . jsapp(必需('。/NPM $createApp()返回一个类型为对象的配置,它包含这些方法[“启动时”、“显示时”、“隐藏时”、“出错时”]。

它还实现了$initAPI(),主要使用Object.defineProperty的get方法将返回封装为promise,这也是API实现promise编写的核心。

$createPage

//dist/pages/index . js Page(必需('。/./NPM/wepy/lib/wepy . js '). default . $ createPage(Index,' pages/Index ');$createPage()与$createApp()类似,只是返回了Page的方法。此外,在生命周期中添加了数据脏值检查$apply()。

数据绑定

wepy用脏数据检查封装原生小程序setData,并在函数运行周期结束时执行脏数据检查。如果在异步函数中更新数据,则需要手动执行$apply()。发布官方流程图。

深入wepy源码:wepy运行原理分析(图1)

在$createPage()中,将在生命周期中调用$apply()来查看其定义:

$ apply(fn){ if(type of(fn)==' function '){ fn . call(this);这个。$ apply();} else { if (this。$$phase) {这个。$ $ phase=' $ apply} else { this。$ digest();} } } } } } $ $阶段识别脏数据检查是否正在运行,如果没有,则执行$digest()。

$ digest(){ let k;让originData=这个。$ data这个。$ $ phase=' $ digest这个。$ $ DC=0;而(这个。$$phase) {这个。$ $ dc如果(这个。$$dc=3) {抛出新错误(“$apply进程中不能调用$ apply”);} .这个。$$phase=(这个。$$phase==='$apply ')?$ digest ' : false}} }}$digest()主要遍历originaldata,将originaldata [k]与这个[k]进行比较,如果没有,则放入readyToSet,循环结束后统一执行setData方法。

最后,检查$$phase是否设置为“$apply”,如果是,进行另一次脏数据检查。

最后

本文分析的源代码以wepy@1.7.1版本为准。更多信息,请参考。另外,本文如有表述不清或不当之处,请批评指正。

更多资讯
游戏推荐
更多+