- 深入理解React Router:從原理到實(shí)踐
- 李楊韜
- 5字
- 2021-04-16 16:10:45
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均一致。
- Spring Boot開發(fā)與測試實(shí)戰(zhàn)
- Learning C# by Developing Games with Unity 2020
- Java應(yīng)用與實(shí)戰(zhàn)
- Learning Chef
- C語言程序設(shè)計(jì)教程(第2版)
- aelf區(qū)塊鏈應(yīng)用架構(gòu)指南
- Learning Neo4j 3.x(Second Edition)
- Mastering Python Networking
- Python算法從菜鳥到達(dá)人
- Java網(wǎng)絡(luò)編程實(shí)戰(zhàn)
- Processing創(chuàng)意編程指南
- Android傳感器開發(fā)與智能設(shè)備案例實(shí)戰(zhàn)
- ExtJS Web應(yīng)用程序開發(fā)指南第2版
- IoT Projects with Bluetooth Low Energy
- 從0到1:HTML5 Canvas動(dòng)畫開發(fā)