官术网_书友最值得收藏!

2.5 history庫原理

2.5.1 history庫的運(yùn)行流程

無論browserHistory、hashHistory還是memoryHistory,其通用運(yùn)行流程都如圖2-2所示。

圖2-2 history庫的運(yùn)行流程

history庫統(tǒng)一維護(hù)了回調(diào)函數(shù)數(shù)組,用于存放listen的響應(yīng)函數(shù)。當(dāng)調(diào)用push、replace方法時(shí),會(huì)確認(rèn)是否調(diào)用過history.block。如果調(diào)用過且history.block入?yún)⒉粸閒alse,則在導(dǎo)航行為發(fā)生前會(huì)進(jìn)行判定;如果入?yún)樽址瑒t會(huì)將字符串內(nèi)容用于提示用戶,由用戶判定是否執(zhí)行導(dǎo)航操作。如果history.block調(diào)用的入?yún)閒alse,則會(huì)強(qiáng)制阻止導(dǎo)航并且沒有任何提示給用戶。注意,在源碼中僅判斷值為false的入?yún)ⅲ瑢?duì)于history.block(true)、history.block(null)等的調(diào)用,將不會(huì)有阻止導(dǎo)航的效果。當(dāng)導(dǎo)航成功之后,history在內(nèi)部會(huì)收集所有的變動(dòng),如location的改變、history.length的改變、action的改變,并將所有的變動(dòng)更新到history各屬性中。在更新完history的狀態(tài)以后,將觸發(fā)listen函數(shù)的所有回調(diào)事件函數(shù),將最新的變動(dòng)location與action通知給各回調(diào)事件函數(shù)。注意,對(duì)于memoryHistory,由于沒有外部瀏覽器的運(yùn)行環(huán)境,將沒有瀏覽器原生事件監(jiān)聽并允許導(dǎo)航的部分,history.push、history.go等流程與圖2-2均一致。

主站蜘蛛池模板: 娄底市| 阳春市| 聂荣县| 白城市| 图们市| 仙居县| 清远市| 佳木斯市| 福鼎市| 吉首市| 翁牛特旗| 大埔区| 眉山市| 江永县| 永寿县| 赣州市| 丰宁| 芦溪县| 阿瓦提县| 金湖县| 手游| 唐河县| 安化县| 鄂伦春自治旗| 皋兰县| 洞口县| 积石山| 芦溪县| 郓城县| 丹寨县| 赣榆县| 桃源县| 连州市| 剑阁县| 双柏县| 太保市| 宜兰市| 长治县| 灵璧县| 花垣县| 连江县|