作者:ru xu,來自原文地址
基礎(chǔ)描述
微信小程序分為app 實(shí)例和page實(shí)例
數(shù)據(jù)流小程序 分為邏輯層和視圖層。 邏輯層用來處理數(shù)據(jù)和方面。 視圖層用來做展現(xiàn)。 邏輯層用setData來更新視圖層。 視圖層通過事件來驅(qū)動(dòng)邏輯層。 頁(yè)面生命周期 vs app生命周期頁(yè)面的生命周期 * onload : 頁(yè)面加載 只調(diào)用一次 * onReady: 頁(yè)面初次渲染完成。 * onshow 頁(yè)面顯示,每次打開頁(yè)面都會(huì)調(diào)用 * onHide: 頁(yè)面隱藏,當(dāng)navigateTo或底部tab切換時(shí)調(diào)用 * onUnload: 頁(yè)面卸載。 頁(yè)面出棧 server端剛開始時(shí) 先加載頁(yè)面,然后調(diào)用onshow 服務(wù)端等待。 前端發(fā)來通知我要數(shù)據(jù),發(fā)送數(shù)據(jù)給前端頁(yè)面渲染。 渲染完成。前端發(fā)來通知 ,我好了。 server端把狀態(tài)改為onReady狀態(tài)。這時(shí)候可以通過setData來修改前端頁(yè)面了。 路由小程序維護(hù)了一個(gè)頁(yè)面棧,類似于瀏覽器的location push 棧。
項(xiàng)目架構(gòu)根據(jù)前面的描述,微信只希望有一個(gè)app, 然后下面有很多page這樣的結(jié)構(gòu),然后將這個(gè)文件傳到微信端,發(fā)布。 但是我們開發(fā)的時(shí)候,
分析其他人的項(xiàng)目 1 組件化– wepy特性
對(duì)所有東西都重新封裝了一遍。 構(gòu)建wepy-cli 是wepy的構(gòu)建工具。 通過babel編譯的,命令行。 github地址:https://github.com/hxw319726/wepy-cli 分析 wepy.js // 腳手架的入口,主要做了這幾件事 // 生成一個(gè)目錄,下面拼了package.json , // 將template的文件拷貝到當(dāng)前文件。 // 然后, 用command 定義了很多命令。 compile.js // 編譯文件的入口 // 針對(duì)各個(gè)文件類型,有各種文件的 編譯器。 compile-wpy.js // 編譯wpy文件 包含 app, page, component // 將 wpy文件,解析成 ret={style: {}, template:{}, script:{}} // 然后依次對(duì)各個(gè)模塊調(diào)用不同的編譯器。 compile-script.js // compile-style.js // 獲取對(duì)應(yīng)的compiler 主要是 // 然后依次對(duì)各個(gè)模塊調(diào)用不同的編譯器。 // 比如下面文件。wepy-compiler-less // 如果有component 將component 的css import進(jìn)來 // wepy-compiler-less 文件 // 引用 less 然后用less對(duì)sass文件進(jìn)行render一遍,輸出promise import less from 'less'; import path from 'path'; export default function (content, config, file) { return new Promise ((resolve, reject) => { let opath = path.parse(file); config.paths = [opath.dir]; less.render(content, config).then(res => { resolve(res.css); }).catch(reject); }); }; compile-template.js // // 然后依次對(duì)各個(gè)模塊調(diào)用不同的編譯器。 然后你就可用做以下事情了
包裝小程序代碼分析組要也就幾個(gè)文件。 當(dāng)我們創(chuàng)建page的時(shí)候需要 class A extend Page{} class B extend Component{} class C extend APP{} 這些都是在wepy的包里面實(shí)現(xiàn)的。
2 redux將redux重新寫了一遍,然后引入到了微信中。 |