React Router 4 的新玩意兒

2021-09-20 01:35:30 字數 1503 閱讀 9688

上乙個專案用的還是 2.6.1,轉眼的功夫 4.0 都發布了,api 變化實在有點大,2.x那套東西不頂用了,老老實實重新看一遍文件,其中有幾點需要注意的,拿出來說一說。

本文只討論針對瀏覽器的應用,使用 react-router-dom(在react-router基礎上封裝了一些高階元件)進行說明。

關於browserrouter:

如果按照原來的使用方式,就掉進第乙個坑里了:history不合法。

用 react-router-dom 中的 元件代替原來的 元件就可以了。

換上之後會出現 2 個問題:

如果你不是通過伺服器啟動應用,因為chrome自身的安全機制,在本地環境下根本不能用chrome玩。這個不關鍵,我本地測試換個瀏覽器還不行麼,本地起個伺服器也不麻煩。

關鍵問題,重新整理就是404。原因很簡單,browserrouter 和 hashrouter 完全不同,前者利用h5的 history 介面,前台路由就是後台收到的路由,你點到其他頁面一重新整理,得,根本沒這個檔案,伺服器也很無辜,到底讓我渲染個啥?後台也可以簡單的解決這個問題:甭管你請求的啥位址,我先把入口檔案扔給你。node處理方式如下(需要express):

response.sendfile(path.resolve(__dirname,'../index.html'))})

啟動node伺服器,通過本機伺服器訪問,完美解決上面兩個問題。

(和 分別是非瀏覽器環境和伺服器端渲染用的,在此不做討論。)

browserrouter 裡可以存在各種標籤。

原來用慣了2.x的同志們,看到新文件的例子可能會發現這個問題:router裡邊不是只能有route麼,怎麼什麼都有。是的,4.0中 router 裡可以存在各種標籤。

導航連線:

看名字就是導航用的,主要用途就是區分啟用的狀態,啟用時的樣式。之前揉柔在link裡的。

只渲染第乙個匹配的元件:

乙個路由可能同時匹配多個路徑,在中,只渲染匹配的第乙個,其他的放棄。之前這是router的預設行為,4.0中為什麼不預設了呢?答:可以將多個route組合到頁面中。想一想,如果你就是想同時渲染多個元件而不只是第乙個呢?很欣慰看到我在2.x中吐槽的問題得到了解決。4.0版本給我最大的感覺就是:他讓瀏覽器更靈活的去渲染頁面。

的渲染方法:

component和之前2.x的方法相同。

render可以傳個函式避免建立新的react element(內聯渲染時使用避免不必要的過載)。

children使用方式與render一致,只不過無論路由是否匹配都會被渲染。

exact屬性為 true 則需要路由完全匹配時才渲染元件(之前也是預設行為)。

三個重要物件:history,location,match

在 route component 中,以 this.props.location 的方式獲取,

在 route render 中,以 () => () 的方式獲取,

在 route children 中,以 () => () 的方式獲取,

history 和 match的獲取方式類似。

玩Linux五年積累的技巧 4 軟體

本文主要介紹了linux軟體方面的一些技巧。作者 jh gao 從最開始接觸linux到現在已經有5年了,和所有人一樣,少不了折騰。折騰後偶爾我會把方法記錄下來,現在簡單總結一下。所以的命令功能通過man都能找到具體用法,我只把自己覺得常用的列舉出來。1.nautilus的技巧 開啟乙個位置 ctr...

css4的新特性 cssNext

1 父元素選擇器 div span 例 wrap div span 此時樣式會落在帶有 的div身上 例2 ol li only child 此時樣式會落在只有乙個li子元素的ol身上。3 文字偽類 分割線 dir ltr 從左到右 dir rtl 從右到左 例 p dir rtl 將會渲染成字型大...

PX4新增新的應用

研究了四天怎麼新增新的應用程式,前幾天都嘗試著新增.cpp檔案的應用程式,跟著網上的方法都失敗了,結果今天試著新增乙個.c檔案的應用程式居然成功了。先把.c的新增方法寫一寫,以後學會了怎麼新增.cpp了再來修改吧。這是官方手冊給的新增方法,也是我參考的 在src下想要的資料夾 如 src modul...