日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Omi框架学习之旅 - 生命周期 及原理说明

發(fā)布時(shí)間:2025/4/16 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Omi框架学习之旅 - 生命周期 及原理说明 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

生命周期

?

nameavatarscompany
constructor構(gòu)造函數(shù)new的時(shí)候
install初始化安裝,這可以拿到用戶傳進(jìn)的data進(jìn)行處理實(shí)例化
installed安裝完成,HTML已經(jīng)插入頁(yè)面之后執(zhí)行實(shí)例化
uninstall卸載組件。執(zhí)行remove方法會(huì)觸發(fā)該事件銷毀時(shí)
beforeUpdate更新前存在期
afterUpdate更新后存在期

?

示意圖

?

以上是官網(wǎng)的,看著讓人還是挺明白的。但是我還是喜歡用我的理解解說一把。

生命周期指一個(gè)對(duì)象的生老病死。具體來說是繼承Omi.Component類的子類的實(shí)例的生命周期。

1. 當(dāng)我們 new 子類的時(shí)候, 子類的實(shí)例會(huì)得到Omi.Component類的所以屬性和方法。

2. 當(dāng)我們使用Omi.render方法時(shí),其實(shí)調(diào)用的是Component類上的_render方法,在這個(gè)方法前后會(huì)分別調(diào)用install和installed方法,就如上圖的左邊部分。

3. 實(shí)例的存在期呢,我們經(jīng)常會(huì)調(diào)用updade方法更新dom節(jié)點(diǎn),那在這個(gè)update方法之前會(huì)分別調(diào)用beforeUpdate和afterUpdate,就如上圖的右邊部分。

4. 實(shí)例銷毀期,就是就是調(diào)用實(shí)例的remove方法,期間也會(huì)調(diào)用update方法(那么必然會(huì)調(diào)用beforeUpdate,afterUpdate方法),之后呢會(huì)調(diào)用uninstall方法。就如上圖的右下角部分。

?

老規(guī)矩:先上demo代碼, 然后提出問題, 之后解答問題, 最后源碼說明。

class Timer extends Omi.Component {constructor(data) {super(data);}install() {console.log('install');this.data = {secondsElapsed: 0};}tick() {this.data.secondsElapsed ++;this.update();}installed() {console.log('installed');this.interval = setInterval(() => {this.tick();}, 1000);}uninstall() {console.log('uninstall');clearInterval(this.interval);}style() {return `.num {color: red;}`;}beforeUpdate() {console.log('beforeUpdata');}render() {console.log('render');return `<div>Seconds Elapsed:<span class="num">{{secondsElapsed}}</span></div> `;}afterUpdate() {console.log('afterUpdate');}};var time = new Timer();Omi.render(time, '#app');setTimeout(() => {time.remove();console.log('已卸載!');}, 10000);

?

demo的疑問和疑問的說明:

疑問1:

Omi.render(time, '#app');的時(shí)候是不是就執(zhí)行了install 和 installed 方法 啊?

答:是的,一般可以在install方法中給實(shí)例設(shè)置數(shù)據(jù), installed方法中update設(shè)置好的數(shù)據(jù)。怎么實(shí)現(xiàn)的如下:



上圖中的2那個(gè)方法主要用來遍歷實(shí)例是否還有孩子,有的話就遍歷孩子,調(diào)用孩子的installed方法。如果孩子還有孩子就遞歸

_childrenInstalled(root){ // 實(shí)例root.children.forEach((child) => { // 遍歷實(shí)例的每一個(gè)孩子this._childrenInstalled(child); // 遞歸(看看自己的孩子還有沒有孩子children)child.installed(); // 調(diào)用孩子實(shí)例installed方法 });}

3那邊的代碼就執(zhí)行installed方法。

這就是使用omi.render方法時(shí)要走的過程。

?

疑問2:
更新節(jié)點(diǎn)使用update方法,這個(gè)update到底做了什么?

答:
這個(gè)的要細(xì)細(xì)看來了,如下



1 這里調(diào)用了beforeUpdate方法。
2 這里上面有解釋,看代碼,如下:
_childrenBeforeUpdate(root) { // 實(shí)例的孩子render方法前的回調(diào)root.children.forEach((child)=>{child.beforeUpdate(); // 跟新孩子的beforeUpdate方法回調(diào)this._childrenBeforeUpdate(child); // 孩子的孩子 });}

? 3 這里就是重新生成html css 事件轉(zhuǎn)換,但是并不是無(wú)腦innerHTML,而是通過morphdom(this.node, this.HTML);來跟新節(jié)點(diǎn)的,這個(gè)morphdom不是虛擬dom,只是局部跟新dom節(jié)點(diǎn),感興趣的可以看看他的源碼。

? 4 這里看看代碼

_childrenAfterUpdate(root){root.children.forEach((child)=>{this._childrenAfterUpdate(child); // 孩子的孩子的afterUpdate方法child.afterUpdate(); // 孩子的afterUpdate方法 });}

? 5 那里就是調(diào)用自身的afterUpdate()方法,至此結(jié)束了。


疑問3:
實(shí)例的remove方法幫我們做了啥啊?

答:幫我們update了節(jié)點(diǎn),只不過把節(jié)點(diǎn)改成了input節(jié)點(diǎn)影藏節(jié)點(diǎn),然后調(diào)用了uninstall方法。如下:


咋們直接進(jìn)入1方法去看看


1 和 3 就是所謂生命周期的方法調(diào)用,我們進(jìn)入2看看去,


其實(shí)要看的代碼只是畫圈的那個(gè),我們進(jìn)1看看,怎么幫我們生成一個(gè)影藏節(jié)點(diǎn)的,代碼如下



之后就把以前的this.node節(jié)點(diǎn)直接換成這個(gè)創(chuàng)建好的節(jié)點(diǎn)。然后回到remove方法中的uninstall方法,就完了。


ps:
了解omi.Component實(shí)例的生命周期,當(dāng)和子組件搭配時(shí),可以很清楚了自己干了啥。

轉(zhuǎn)載于:https://www.cnblogs.com/sorrowx/p/6612262.html

總結(jié)

以上是生活随笔為你收集整理的Omi框架学习之旅 - 生命周期 及原理说明的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产黄色大片在线观看 | 福利电影在线播放 | 在线毛片观看 | 俺来也在线视频 | 神马午夜51 | 欧美精品一区二区三区蜜臀 | 国产一二在线 | 免费av小说 | 婷婷综合五月 | 日韩视频一区二区在线观看 | 色图视频| 国产20页| 精品人体无码一区二区三区 | 国产码视频 | 熟妇高潮喷沈阳45熟妇高潮喷 | av中文字幕网址 | 国产精品丝袜黑色高跟 | 亚洲第一综合网站 | 久久久久久成人 | 欧美一区三区三区高中清蜜桃 | 欧美一区二区三区粗大 | 欧美日韩小视频 | 欧美成人综合视频 | 我们俩电影网mp4动漫官网 | 色小姐av| 一级黄色片免费 | 欧美黄色大片免费看 | 免费a网址 | 天天操夜夜操夜夜操 | 国产suv精品一区二区68 | 9999久久久久| 午夜小视频在线观看 | 狠狠躁夜夜躁人人爽天天高潮 | 久久av网| 国产乱淫av麻豆国产 | 97香蕉| 日韩一区二区三区四区 | 天天操夜夜骑 | fc2成人免费视频 | 人成在线免费视频 | 黄色一级大片在线免费看产 | 亚洲一区二区精品 | 欧美高清a | 手机福利在线 | 国产成人一区二区在线 | 人妖ts福利视频一二三区 | 日本理伦片午夜理伦片 | 精品熟妇无码av免费久久 | 国产视频在线观看一区 | 国产欧美精品一区二区色综合朱莉 | 人人爽人人爽人人片av | 高清免费视频日本 | 又粗又猛又爽又黄少妇视频网站 | 69黄色片| 在线岛国 | 国产精品porn| 青草操| 天美麻花果冻视频大全英文版 | 亚洲国产毛片aaaaa无费看 | 久久久看 | 手机在线看黄色 | 91亚洲专区 | 免费黄色资源 | 国产精品乱 | 美女扒开粉嫩尿口 | 日本一本在线 | 性感美女在线观看 | 香蕉视频最新网址 | 久久久久久久久久久网站 | 香蕉日日 | 亚洲精品网站在线 | 成人无码av片在线观看 | 欧美丰满老妇性猛交 | 黄色精品一区二区 | 丰满岳乱妇一区二区 | 亚洲三级在线免费观看 | 美色视频 | 久久人人添人人爽添人人片 | 国产日日操 | 在线观看日韩中文字幕 | 一级特毛片 | 亚洲最大中文字幕 | 亚洲精品日日夜夜 | 青青草成人免费 | 伊伊总综合网 | 亚洲最新 | 50度灰在线 | 欧美视频免费看 | 嫩草视频一区二区三区 | 精品视频久久久久 | 国产精品伦一区二区三级古装电影 | 国产精品厕所 | 天天综合亚洲 | 成人无高清96免费 | 亚洲熟女少妇一区 | 亚洲国产图片 | 奇米色综合 | www.香蕉视频在线观看 | av无毛|