搜尋
首頁web前端js教程React-router v4使用步驟詳解

React-router v4使用步驟詳解

May 24, 2018 am 10:55 AM
react-router使用詳解

這次帶給大家React-router v4使用步驟詳解,React-router v4使用的注意事項有哪些,下面就是實戰案例,一起來看一下。

也許學習react-router最好的方法就是用react-router-dom v4來寫一個多頁的react應用程式。這個react應用程式會包含登入、註冊、首頁、聯絡人等頁面。但是,首先讓我們來看看react router v4的概念,以及它與v3有什麼不同的地方。

React router v4 vs v3

v4是react router的一次重寫,所以和v3有很多不同的地方。主要有:

  • 在react router v4裡,路由不再是集中在一起的。它成了應用程式佈局、UI的一部分。

  • 瀏覽器用的router在react-router-dom#裡。所以,瀏覽器裡使用的時候只需要import react-router-dom就可以。

  • 新的概念BrowerRouterHashRouter。他們各自服務於不同的情境。詳見下文。

  • 不在使用{props.children}來處理巢狀的路由。

  • v4的路由預設不再排他,會有多個符合。而v3是預設排他的,只會有一個符合被使用。

react-router-dom是react-router中用來瀏覽器的。 react-router分成幾個部分:

  • #react-router是瀏覽器和原生應用程式的通用部分。

  • react-router-dom是用來瀏覽器的。

  • react-router-native是用於原生應用的。

React-router vs react-router-dom vs react-router-native

react-router是核心部分。 react-router-dom提供了瀏覽器使用所需的客製化元件。 react-router-native則特別提供了在原生行動應用程式中需要用到的部分。所以,如果在本例中實作瀏覽器開發就只需要安裝react-router-dom

安裝

如上所說,我們使用react開發web應用,所以只需要安裝react-router-dom

  npm install react-router-dom --save

瞭解並使用react-router

  • #BrowserRouter,這是對Router介面的實作。使得頁面和瀏覽器的history保持一致。如:window.location

  • HashRouter,跟上面的一樣,只是使用的是url的hash部分,例如:window.location.hash

  • MemoryRouter

  • #NativeRouter,處理react native內的路由。

  • <a href="http://www.php.cn/wiki/188.html" target="_blank">Static</a>Router,處理靜態路由,和v3一樣。

BrowserRouter vs HashRouter

在react-router的各種router中,<browserrouter></browserrouter><hashrouter></hashrouter>是可以在瀏覽器中使用的。如果你使用的是一個非靜態的網站、要處理各種不同的url那麼你就需要使用BrowserRouter。相反的如果你的server只處理靜態的url,那就使用HashRouter

理解並使用Route

元件是react router v4裡最有用的元件。背後的使用哲學也很簡單,無論何時你需要在匹配某個路徑的時候繪製一個元件,那麼就可以使用Route元件。

Route元件可以使用如下的屬性:

  • #path屬性,字串類型,它的值就是用來匹配url的。

  • component屬性,它的值就是一個元件。在path匹配成功之後會繪製這個元件。

  • exact屬性,這個屬性用來指明這個路由是不是排他的匹配。

  • strict屬性,  這個屬性指明路徑只符合以斜線結尾的路徑。

还有其他的一些属性,可以用来代替component属性。

  • render属性,一个返回React组件的方法。传说中的rencer-prop就是从这里来的。

  • children属性,返回一个React组件的方法。只不过这个总是会绘制,即使没有匹配的路径的时候。

多数的时候是用component属性就可以满足。但是,某些情况下你不得不使用renderchildren属性。

  • match

  • location

  • history

如:
使用组件:

&lt;route&gt;&lt;/route&gt;

使用render属性实现内联绘制:

<route><p>HomePage</p>} /></route>

来看哥更复杂的:

const FadingRoute = ({ component, ...rest }) => (
  <route> (
    <fadein>
      <componnet></componnet>
    </fadein>
  )} />
)
<fadingroute></fadingroute></route>

使用children


         
const ListItemLink = ({to, ...rest}) => (    (     
  •       <link>     
  •   )} /> )

    更多关于react-router v4如何匹配路径的内容,请移步这里。

    URL / Path / Route的参数

    通常情况下,我们都会在路径里添加参数。这样方便在不同的组件之间传递一些必要的数据。那么我们如何才能获取到这些传递的参数,并传递给组件中呢?我们只需要在路径的最后加上/:param。如:

    &lt;route&gt;&lt;/route&gt;
    const HomePage = ({match}) => (
      

        

     parameter => {match.params.param1}    );

    一旦有路径可以匹配成功,那么就会穿件一个拥有如下属性的对象,并传入绘制的组件里:

    • url: 匹配的url。

    • path:就是path。

    • isExact:如果path和当前的widnow.location的path部分完全相同的话。

    • params:在URL里包含的参数。

    Link是react router v4特有的一个组件。是用来代替上一版的anchor link。使用Link可以在React应用的不同页面之间跳转。与unclor会重新加载整个页面不同,Link只会重新加载页面里和当前url可以匹配的部分。

    Link组件需要用到to属性,这个属性的值就是react router要跳转到的地址。如:

    import { Link } from 'react-router-dom';
    const Nav = () => (
      <link>Home
    );

    当被点击的时候,会跳转到路径:/

    to属性的值可以是一个字符串,也可以是一个location(pathname, hash, state和search)对象。比如:

    <link>

    Link也可以使用replace属性,如果点击的话,那么history里的当前领会被replace。

    <link>和

    NavLinkLink的一个子类,在Link组件的基础上增加了绘制组件的样式,比如:

    <navlink>
      My Profile
    </navlink>

    使用react router dom实现你的第一个demo

    现在我们用react router dom来实现第一个demo。

    首先,引入必要的组件。比如:RouteBrowserRouter

    import { BrowserRouter, Route } from 'react-router-dom';

    接下来,我们创建一些组件和一些Html标签。同时我们用react router v4里的LinkNavLink组件。

    const BaseLayout = () => (
      

        

          

    React Router v4 Browser Example

               
        

          &lt;route&gt;&lt;/route&gt;       &lt;route&gt;&lt;/route&gt;       &lt;route&gt;&lt;/route&gt;       &lt;route&gt;&lt;/route&gt;       &lt;route&gt;&lt;/route&gt;       &lt;route&gt;&lt;/route&gt;     

        
          React Router v4 Browser Example (c) 2017     
       );

    然后我们来创建需要的组件:

    const HomePage = () => <p>This is a Home Page</p>
    const LoginPage = () => <p>This is a Login Page</p>
    const RegisterPage = () => <p>This is a Register Page</p>
    const ProfilePage = () => <p>This is a Profile Page</p>
    const AboutPage = () => <p>This is a About Page</p>
    const ContactPage = () => <p>This is a Contact Page</p>

    最后,写App组件。

    const App = () => (
      <browserrouter>
        <baselayout></baselayout>
      </browserrouter>
    )
    render(<app></app>, document.getElementById('root'));

    如你所见,react router v4的组件还非常的易用的。

    理解和使用非排他的路由

    在上例中,我们在HomePage组件的路由里使用了属性exact

    &lt;route&gt;&lt;/route&gt;

    这是因为v4中的路由默认都是非排他的,这一点和v3的实现思路截然不同。如果没有exact属性,HomePage组件和其他的组件就会同事绘制在页面上。

    如,当用户点了登录连接以后,"/""/login"都满足匹配条件,对应的登录组件和Home组件就会同时出现在界面上。但是,这不是我们期待的结果,所以我们要给"/"path加上exact属性。

    现在我们来看看非排他的路由有什么优点。假如我们有一个子菜单组件需要显示在profile页面出现的时候也出现。我们可以简单的修改BasicLayout来实现。

    const BaseLayout = () =>  (
      

        

          

    React Router v4 Browser Example

               
      

    );

    这样我们就会看到对应于"/me"路径的组件都绘制出来了。这就是非排他路由的好处。

    理解排他路由

    排他路由是react router v3的默认实现。只有第一个匹配的路由对应的组件会被绘制。这一点也可以用react router v4的Switch组件来实现。在Switch组件中,只有第一个匹配的路由&lt;route&gt;&lt;/route&gt;或者&lt;redirect&gt;&lt;/redirect&gt;会被绘制:

    import { Switch, Route } from 'react-router';
    
      &lt;route&gt;&lt;/route&gt;
      &lt;route&gt;&lt;/route&gt;
      &lt;route&gt;&lt;/route&gt;
      &lt;route&gt;&lt;/route&gt;
    

    浏览器历史

    react router v4中,提供了一个history对象。这个对象包含了多个api,可以用来操作浏览器历史等。

    你也可以在React应用里使用history对象的方法:

    history.push("/my-path")
    history.replace("/my-path")

    用另外的方法可以写成:

    <link>
    &lt;redirect&gt;&lt;/redirect&gt;

    使用组件实现重定向

    无论何时你要重定向到另外一个地址的时候,都可以使用Redirect组件:

    &lt;redirect&gt;&lt;/redirect&gt;

    或者,更为简单的:

    &lt;redirect&gt;&lt;/redirect&gt;

    最后

    react router v4让开发react应用变得更加的简单。让react应用内的页面跳转更加简单。你只需要声明一个BrowserRouter或者HashRouter,然后在它的内部放上一系列的Route组件,这些主键只要包含pathcomponent属性。无论何时有了匹配的路由,那么它就会进行非排他的绘制(所有匹配的路由都会绘制)。你也可以把Route放在Switch组件里来实现排他的绘制(只有第一个匹配的路由会被绘制)。你可以在路径中传递参数,match对象会保留这些参数。最后,所有在web中使用的路由组件都包含在react-router-dom中。只需要引入react-router-dom就可以使用。

    相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!

    推荐阅读:

    Chart.js 轻量级HTML5图表绘制工具库使用步骤详解

    Chart.js轻量级图表库使用案例解析

    以上是React-router v4使用步驟詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

    陳述
    本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
    從C/C到JavaScript:所有工作方式從C/C到JavaScript:所有工作方式Apr 14, 2025 am 12:05 AM

    從C/C 轉向JavaScript需要適應動態類型、垃圾回收和異步編程等特點。 1)C/C 是靜態類型語言,需手動管理內存,而JavaScript是動態類型,垃圾回收自動處理。 2)C/C 需編譯成機器碼,JavaScript則為解釋型語言。 3)JavaScript引入閉包、原型鍊和Promise等概念,增強了靈活性和異步編程能力。

    JavaScript引擎:比較實施JavaScript引擎:比較實施Apr 13, 2025 am 12:05 AM

    不同JavaScript引擎在解析和執行JavaScript代碼時,效果會有所不同,因為每個引擎的實現原理和優化策略各有差異。 1.詞法分析:將源碼轉換為詞法單元。 2.語法分析:生成抽象語法樹。 3.優化和編譯:通過JIT編譯器生成機器碼。 4.執行:運行機器碼。 V8引擎通過即時編譯和隱藏類優化,SpiderMonkey使用類型推斷系統,導致在相同代碼上的性能表現不同。

    超越瀏覽器:現實世界中的JavaScript超越瀏覽器:現實世界中的JavaScriptApr 12, 2025 am 12:06 AM

    JavaScript在現實世界中的應用包括服務器端編程、移動應用開發和物聯網控制:1.通過Node.js實現服務器端編程,適用於高並發請求處理。 2.通過ReactNative進行移動應用開發,支持跨平台部署。 3.通過Johnny-Five庫用於物聯網設備控制,適用於硬件交互。

    使用Next.js(後端集成)構建多租戶SaaS應用程序使用Next.js(後端集成)構建多租戶SaaS應用程序Apr 11, 2025 am 08:23 AM

    我使用您的日常技術工具構建了功能性的多租戶SaaS應用程序(一個Edtech應用程序),您可以做同樣的事情。 首先,什麼是多租戶SaaS應用程序? 多租戶SaaS應用程序可讓您從唱歌中為多個客戶提供服務

    如何使用Next.js(前端集成)構建多租戶SaaS應用程序如何使用Next.js(前端集成)構建多租戶SaaS應用程序Apr 11, 2025 am 08:22 AM

    本文展示了與許可證確保的後端的前端集成,並使用Next.js構建功能性Edtech SaaS應用程序。 前端獲取用戶權限以控制UI的可見性並確保API要求遵守角色庫

    JavaScript:探索網絡語言的多功能性JavaScript:探索網絡語言的多功能性Apr 11, 2025 am 12:01 AM

    JavaScript是現代Web開發的核心語言,因其多樣性和靈活性而廣泛應用。 1)前端開發:通過DOM操作和現代框架(如React、Vue.js、Angular)構建動態網頁和單頁面應用。 2)服務器端開發:Node.js利用非阻塞I/O模型處理高並發和實時應用。 3)移動和桌面應用開發:通過ReactNative和Electron實現跨平台開發,提高開發效率。

    JavaScript的演變:當前的趨勢和未來前景JavaScript的演變:當前的趨勢和未來前景Apr 10, 2025 am 09:33 AM

    JavaScript的最新趨勢包括TypeScript的崛起、現代框架和庫的流行以及WebAssembly的應用。未來前景涵蓋更強大的類型系統、服務器端JavaScript的發展、人工智能和機器學習的擴展以及物聯網和邊緣計算的潛力。

    神秘的JavaScript:它的作用以及為什麼重要神秘的JavaScript:它的作用以及為什麼重要Apr 09, 2025 am 12:07 AM

    JavaScript是現代Web開發的基石,它的主要功能包括事件驅動編程、動態內容生成和異步編程。 1)事件驅動編程允許網頁根據用戶操作動態變化。 2)動態內容生成使得頁面內容可以根據條件調整。 3)異步編程確保用戶界面不被阻塞。 JavaScript廣泛應用於網頁交互、單頁面應用和服務器端開發,極大地提升了用戶體驗和跨平台開發的靈活性。

    See all articles

    熱AI工具

    Undresser.AI Undress

    Undresser.AI Undress

    人工智慧驅動的應用程序,用於創建逼真的裸體照片

    AI Clothes Remover

    AI Clothes Remover

    用於從照片中去除衣服的線上人工智慧工具。

    Undress AI Tool

    Undress AI Tool

    免費脫衣圖片

    Clothoff.io

    Clothoff.io

    AI脫衣器

    AI Hentai Generator

    AI Hentai Generator

    免費產生 AI 無盡。

    熱門文章

    R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
    3 週前By尊渡假赌尊渡假赌尊渡假赌
    R.E.P.O.最佳圖形設置
    3 週前By尊渡假赌尊渡假赌尊渡假赌
    R.E.P.O.如果您聽不到任何人,如何修復音頻
    3 週前By尊渡假赌尊渡假赌尊渡假赌
    WWE 2K25:如何解鎖Myrise中的所有內容
    4 週前By尊渡假赌尊渡假赌尊渡假赌

    熱工具

    SublimeText3 Linux新版

    SublimeText3 Linux新版

    SublimeText3 Linux最新版

    EditPlus 中文破解版

    EditPlus 中文破解版

    體積小,語法高亮,不支援程式碼提示功能

    PhpStorm Mac 版本

    PhpStorm Mac 版本

    最新(2018.2.1 )專業的PHP整合開發工具

    SublimeText3 Mac版

    SublimeText3 Mac版

    神級程式碼編輯軟體(SublimeText3)

    記事本++7.3.1

    記事本++7.3.1

    好用且免費的程式碼編輯器