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

2.5 history庫原理

2.5.1 history庫的運行流程

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

圖2-2 history庫的運行流程

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

主站蜘蛛池模板: 舟曲县| 芦山县| 元谋县| 岢岚县| 海淀区| 吉木萨尔县| 星子县| 徐水县| 黄石市| 庆安县| 仁化县| 梅河口市| 库伦旗| 晋州市| 鄂州市| 广宗县| 济源市| 齐齐哈尔市| 梁河县| 泰和县| 南部县| 沙田区| 交城县| 桂林市| 定边县| 海林市| 余江县| 永州市| 东光县| 泽州县| 常熟市| 两当县| 额敏县| 西丰县| 阿瓦提县| 大同县| 宁河县| 灵寿县| 乌兰县| 内江市| 杭州市|