- 深入理解React Router:從原理到實踐
- 李楊韜
- 377字
- 2021-04-16 16:10:45
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均一致。
- 薛定宇教授大講堂(卷Ⅳ):MATLAB最優(yōu)化計算
- Python 3破冰人工智能:從入門到實戰(zhàn)
- Python極簡講義:一本書入門數(shù)據(jù)分析與機(jī)器學(xué)習(xí)
- Android Wear Projects
- Python深度學(xué)習(xí)原理、算法與案例
- Hands-On Neural Network Programming with C#
- OpenMP核心技術(shù)指南
- 從程序員角度學(xué)習(xí)數(shù)據(jù)庫技術(shù)(藍(lán)橋杯軟件大賽培訓(xùn)教材-Java方向)
- Sails.js Essentials
- Python應(yīng)用與實戰(zhàn)
- Java多線程并發(fā)體系實戰(zhàn)(微課視頻版)
- Java從入門到精通(視頻實戰(zhàn)版)
- Java Web應(yīng)用開發(fā)
- C語言程序設(shè)計實驗指導(dǎo)教程
- Java基礎(chǔ)案例教程(第2版)