React-Router 4 的新玩意兒

来源:http://www.cnblogs.com/lihuanqing/archive/2017/05/18/6871896.html
-Advertisement-
Play Games

上一個項目用的還是 2.6.1,轉眼的功夫 4.0 都發佈了,API 變化實在有點大,2.X那套東西不頂用了,老老實實重新看一遍文檔,其中有幾點需要註意的,拿出來說一說。 本文只討論針對瀏覽器的應用,使用 react-router-dom(在react-router基礎上封裝了一些高級組件)進行說明 ...


上一個項目用的還是 2.6.1,轉眼的功夫 4.0 都發佈了,API 變化實在有點大,2.X那套東西不頂用了,老老實實重新看一遍文檔,其中有幾點需要註意的,拿出來說一說。

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

  1. 關於BrowserRouter

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

用 react-router-dom 中的 <HashRouter>組件代替原來的 <Router> 組件就可以了。

這是之前2.X版本處理瀏覽器路由的方式,4.0版本中推薦另一個組件:<BrowserRouter >

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

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

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

app.get('*',(request,response)=>{

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

})

 

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

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

  1. BrowserRouter 里可以存在各種標簽。

原來用慣了2.X的同志們,看到新文檔的例子可能會發現這個問題:Router裡邊不是只能有Route麽,怎麼什麼都有。是的,4.0中 Router 里可以存在各種標簽。

  1. 導航連接<NavLink>

看名字就是導航用的,主要用途就是區分激活的狀態,激活時的樣式。之前揉柔在Link里的。

  1. 只渲染第一個匹配的組件<Switch>

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

  1. <Route>的渲染方法:

<Route component>

<Route render>

<Route children>

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

render可以傳個函數避免創建新的React element(內聯渲染時使用避免不必要的重載)。

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

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

  1. 三個重要對象:history,location,match

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

在 Route render 中,以 ({ location }) => () 的方式獲取,

在 Route children 中,以 ({ location }) => () 的方式獲取,

History match的獲取方式類似。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 填寫form表單時發現的一個坑啊! 當你之前有填寫過表單,獲取焦點時,input會有一個記錄之前填寫過的文本的下拉列表式的東東,就像這樣:(抱歉醜了點,隱私問題打上了馬賽克) 按理說,這沒什麼問題,很多時候為了方便,也需要它記錄輸入,但是,同時也發現,文本框變成了黃色了!而且當你選擇其中的文本時它依 ...
  • 恢復內容開始 數組排序的話最常用的就是array.sort()這個方法了。 sort()裡面傳入一個方法來比較大小的值; 對象進行比較的話:按照時間排序 還有一種方法是當兩個值相等時,拿另一個參數作為比較值 然後我最近要做的是預設地址排在第一位,之後的按照時間排序 var data = [{name ...
  • 最近在寫手機端,發現了一個問題,就是javascript點擊元素時,在安卓手機上會出現半透明的藍色背景,(經百度,在蘋果手機上會出現半透明的灰色背景),後來通過百度找到瞭解決方案,就是利用CSS3的-webkit-tap-highlight-color屬性來設置,透過屬性名稱就知道這是設置觸摸高亮顏 ...
  • 前言:這是筆者學習之後自己的理解與整理。如果有錯誤或者疑問的地方,請大家指正,我會持續更新! 滑鼠事件 滑鼠事件共10類,包括click、contextmenu(右鍵)、dblclick(雙擊)、mousedown、mouseup、mousemove、mouseover、mouseout、mouse ...
  • 1.本文屬於改進版本哈 自己也是真的菜,一個websocket簡單聊天系統硬被我搞了那麼些天。 看來以後還是得寫更多的代碼。 client.html: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name= ...
  • 可以通過input 和select來創建下拉列表 其中select的創建如下: 通過json來創建js數組 例子: html代碼片段: js代碼片段: 頁面效果顯示: 屬性解釋: 使用 ...
  • 隨著直播越來越火,所在公司也打算製作自己的直播,所以去瞭解了這方面,使用後發現還是有些問題需要記錄的。 經過分析,製作直播應該是分為兩塊來做,即直播與實時評論。這裡先去製作實時評論,等直播ok後,也會將相應心得寫上來。 我們直播採用了阿裡雲,評論採用了融雲。 其實融雲的api還是比較清晰的,只不過w ...
  • Array.isArray 返回true或者false 格式 Array.isArray(obj) Array.isArray([]); // true Array.isArray([1]); // ture Array.isArray(new Array()); // true Array.isA ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...