哇,平常寫路由時基本就是簡單的按照組件給的示例寫,從來沒有考慮為什么,又遇見了路由相關的問題,先記錄一下問題,好好捋一下,哎,好香要個大佬來帶帶我呀,每次遇到問題要解決好久
問題: 判斷是否登錄之后跳轉到登錄頁面,路徑對了,但是卻沒有加載該頁面的內容?
截圖:
思路:在checkLogin里用到了withRouter,不曉得是不是props沒傳過來,決定好好捋一下路由的原理,然后再去查究竟是哪里出了問題,但是真的好奇怪呀,之前的項目我也用到了react-router就沒這樣的問題...
解決進程:待解決(11.12 11:00)
要被自己蠢哭了,是因為寫成大寫了......細心!細心!細心!
順便記錄一下在babel 7.1.0里如何配置@connect
注意:因為在.babelrc里寫了就不要在package.json里寫了,刪除package.json里的babel配置,然后在.babelrc文件里做如下修改
match:匹配路徑參數的對象
location:可以通過改變它相關的參數來改變路由
history:同上,另一種api,改變url而不刷新頁面
單頁面路由:每次切換頁面的時,不需要請求服務器,只要通過本地的js來切換即可. hash和history兩種路由模式。
hashchange
事件能監聽 url hash 的改變, popstate事件能監聽除 history.pushState()
和 history.replaceState()
外 url 的變化。
在html5中的history api包括兩個方法history.pushState()和history.replaceState(),包含一個事件history.onpopstate
history.pushState(stateObj, title, url)
- stateObj為一個狀態對象,這個對象可以被popstate事件讀取到,也可以在history對象中獲取。
- title為標題,但是瀏覽器目前還沒能實現,由於其本身是一個字符串,所以我們使用‘’來代替即可。
- url為路徑。一般設定為相對的url,絕對路徑需要保證同源。
pushState向瀏覽器的歷史記錄棧中壓入一個歷史記錄。
history.replaceState()
這個就比較好理解了,接受的參數都是一樣的,作用就是替換當前歷史記錄棧中的記錄。
onpopstate事件
在瀏覽器前進、后退時觸發,一般就是歷史記錄棧中的指針改變的時候就會觸發這個事件了。
參考來源:
1.單頁面應用路由的兩種實現方式 https://www.cnblogs.com/zhuzhenwei918/p/7421430.html
2.徹底搞懂路由跳轉:location 和 history 接口 https://segmentfault.com/a/1190000014120456