- 深入理解React Router:從原理到實(shí)踐
- 李楊韜
- 396字
- 2021-04-16 16:10:44
2.4.2 history導(dǎo)航
1.history.push
與browserHistory一樣,其簽名為:

對于memoryHistory,其location存儲(chǔ)在內(nèi)存中,在調(diào)用history.push后,得到的location既可通過memoryHistory.location獲取,也可通過訪問歷史棧獲取:

與browserHistory、hashHistory一樣,memoryHistory不僅支持調(diào)用block阻止跳轉(zhuǎn),還支持相對路徑導(dǎo)航、保存state等:


注意,在memoryHistory導(dǎo)航過程中,所有信息都將保存到location中,不像browserHistory的key與state一樣存在于window.history.state中進(jìn)行持久化存儲(chǔ),memoryHistory導(dǎo)航過程中所有的key與state均存儲(chǔ)在自身維護(hù)的內(nèi)存中。

對于history.push的實(shí)現(xiàn),其模擬了瀏覽器管理歷史記錄的方法:

2.history.replace
history.replace可替換歷史棧內(nèi)容,與browserHistory、hashHistory等均一致,其簽名如下:

history.replace不增加棧記錄:

對于history.replace,其內(nèi)部實(shí)現(xiàn)非常簡單,使用新的location替換歷史棧中對應(yīng)位置的歷史記錄即可:

3.history.go
memoryHistory的go方法與browserHistory、hashHistory的go方法一樣,都是移動(dòng)棧指針,不改變棧的內(nèi)容;但其在實(shí)現(xiàn)上與這兩者不同的是,browserHistory和hashHistory歷史棧的棧指針由瀏覽器管理,而memoryHistory沒有history.go方法可供調(diào)用以移動(dòng)棧指針,所以memoryHistory自行維護(hù)棧指針,即便調(diào)用history.go方法也應(yīng)自行控制棧指針。


history.go方法對跳轉(zhuǎn)距離n做了鉗位控制:

n被限制在0與history.entries.length-1之間。
- Data Visualization with D3 4.x Cookbook(Second Edition)
- 手機(jī)安全和可信應(yīng)用開發(fā)指南:TrustZone與OP-TEE技術(shù)詳解
- 零基礎(chǔ)搭建量化投資系統(tǒng):以Python為工具
- Oracle Exadata性能優(yōu)化
- 深入淺出Java虛擬機(jī):JVM原理與實(shí)戰(zhàn)
- R語言數(shù)據(jù)可視化之美:專業(yè)圖表繪制指南
- 實(shí)用防銹油配方與制備200例
- Hadoop+Spark大數(shù)據(jù)分析實(shí)戰(zhàn)
- C語言程序設(shè)計(jì)
- R數(shù)據(jù)科學(xué)實(shí)戰(zhàn):工具詳解與案例分析
- Nagios Core Administration Cookbook(Second Edition)
- 從0到1:HTML5 Canvas動(dòng)畫開發(fā)
- Blender 3D Cookbook
- Dart:Scalable Application Development
- CryENGINE Game Programming with C++,C#,and Lua