這次帶給大家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
#裡。所以,瀏覽器裡使用的時候只需要importreact-router-dom
就可以。新的概念
BrowerRouter
和HashRouter
。他們各自服務於不同的情境。詳見下文。不在使用
{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
Route
元件。
Route
元件可以使用如下的屬性:
#path屬性,字串類型,它的值就是用來匹配url的。
component屬性,它的值就是一個元件。在
path
匹配成功之後會繪製這個元件。exact屬性,這個屬性用來指明這個路由是不是排他的匹配。
strict屬性, 這個屬性指明路徑只符合以斜線結尾的路徑。
还有其他的一些属性,可以用来代替component
属性。
render属性,一个返回React组件的方法。传说中的rencer-prop就是从这里来的。
children属性,返回一个React组件的方法。只不过这个总是会绘制,即使没有匹配的路径的时候。
多数的时候是用component
属性就可以满足。但是,某些情况下你不得不使用render
或children
属性。
match
location
history
如:
使用组件:
<route></route>
使用render
属性实现内联绘制:
<route><p>HomePage</p>} /></route>
来看哥更复杂的:
const FadingRoute = ({ component, ...rest }) => ( <route> ( <fadein> <componnet></componnet> </fadein> )} /> ) <fadingroute></fadingroute></route>
使用children
:
更多关于react-router v4如何匹配路径的内容,请移步这里。
URL / Path / Route的参数
通常情况下,我们都会在路径里添加参数。这样方便在不同的组件之间传递一些必要的数据。那么我们如何才能获取到这些传递的参数,并传递给组件中呢?我们只需要在路径的最后加上/:param
。如:
<route></route> const HomePage = ({match}) => (
parameter => {match.params.param1} );
一旦有路径可以匹配成功,那么就会穿件一个拥有如下属性的对象,并传入绘制的组件里:
url: 匹配的url。
path:就是path。
isExact:如果
path
和当前的widnow.location
的path部分完全相同的话。params:在URL里包含的参数。
理解并使用Link
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>和
NavLink
是Link
的一个子类,在Link组件的基础上增加了绘制组件的样式,比如:
<navlink> My Profile </navlink>
使用react router dom实现你的第一个demo
现在我们用react router dom来实现第一个demo。
首先,引入必要的组件。比如:Route
和BrowserRouter
。
import { BrowserRouter, Route } from 'react-router-dom';
接下来,我们创建一些组件和一些Html标签。同时我们用react router v4里的Link
和NavLink
组件。
const BaseLayout = () => (
React Router v4 Browser Example
<route></route> <route></route> <route></route> <route></route> <route></route> <route></route>
);
然后我们来创建需要的组件:
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
。
<route></route>
这是因为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
组件中,只有第一个匹配的路由<route></route>
或者<redirect></redirect>
会被绘制:
import { Switch, Route } from 'react-router';<route></route> <route></route> <route></route> <route></route>
浏览器历史
react router v4中,提供了一个history
对象。这个对象包含了多个api,可以用来操作浏览器历史等。
你也可以在React应用里使用history
对象的方法:
history.push("/my-path") history.replace("/my-path")
用另外的方法可以写成:
<link> <redirect></redirect>
使用组件实现重定向
无论何时你要重定向到另外一个地址的时候,都可以使用Redirect
组件:
<redirect></redirect>
或者,更为简单的:
<redirect></redirect>
最后
react router v4让开发react应用变得更加的简单。让react应用内的页面跳转更加简单。你只需要声明一个BrowserRouter
或者HashRouter
,然后在它的内部放上一系列的Route
组件,这些主键只要包含path
和component
属性。无论何时有了匹配的路由,那么它就会进行非排他的绘制(所有匹配的路由都会绘制)。你也可以把Route
放在Switch
组件里来实现排他的绘制(只有第一个匹配的路由会被绘制)。你可以在路径中传递参数,match
对象会保留这些参数。最后,所有在web中使用的路由组件都包含在react-router-dom
中。只需要引入react-router-dom
就可以使用。
相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!
推荐阅读:
以上是React-router v4使用步驟詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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

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

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

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

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

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

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

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


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

SublimeText3 Linux新版
SublimeText3 Linux最新版

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

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

記事本++7.3.1
好用且免費的程式碼編輯器