摘要:本文給大家介紹的是相比于其他框架更靈活的配置方式,大家可以根據(jù)自己的項(xiàng)目需要選擇合適的方式。標(biāo)簽的方式下面我們看一個(gè)例子當(dāng)為時(shí)渲染我們可以看到這種路由配置方式使用標(biāo)簽,然后根據(jù)找到對(duì)應(yīng)的映射。
路由的概念
路由的作用就是將url和函數(shù)進(jìn)行映射,在單頁(yè)面應(yīng)用中路由是必不可少的部分,路由配置就是一組指令,用來告訴router如何匹配url,以及對(duì)應(yīng)的函數(shù)映射,即執(zhí)行對(duì)應(yīng)的代碼。
react-router每一門JS框架都會(huì)有自己定制的router框架,react-router就是react開發(fā)應(yīng)用御用的路由框架,目前它的最新的官方版本為4.1.2。本文給大家介紹的是react-router相比于其他router框架更靈活的配置方式,大家可以根據(jù)自己的項(xiàng)目需要選擇合適的方式。
1.標(biāo)簽的方式下面我們看一個(gè)例子:
import { IndexRoute } from "react-router" const Dashboard = React.createClass({ render() { returnWelcome to the app!} }) React.render((), document.body) {/* 當(dāng) url 為/時(shí)渲染 Dashboard */}
我們可以看到這種路由配置方式使用Route標(biāo)簽,然后根據(jù)component找到對(duì)應(yīng)的映射。
這里需要注意的是IndexRoute這個(gè)有點(diǎn)不一樣的標(biāo)簽,這個(gè)的作用就是匹配"/"
的路徑,因?yàn)樵阡秩続pp整個(gè)組件的時(shí)候,可能它的children還沒渲染,就已經(jīng)有"/"頁(yè)面了,你可以把IndexRoute當(dāng)成首頁(yè)。
嵌套路由就直接在Route的標(biāo)簽中在加一個(gè)標(biāo)簽,就是這么簡(jiǎn)單
2.對(duì)象配置方式有時(shí)候我們需要在路由跳轉(zhuǎn)之前做一些操作,比如用戶如果編輯了某個(gè)頁(yè)面信息未保存,提醒它是否離開。react-router提供了兩個(gè)hook,onLeave在所有將離開的路由觸發(fā),從最下層的子路由到最外層的父路由,onEnter在進(jìn)入路由觸發(fā),從最外層的父路由到最下層的自路由。
讓我們看代碼:
const routeConfig = [ { path: "/", component: App, indexRoute: { component: Dashboard }, childRoutes: [ { path: "about", component: About }, { path: "inbox", component: Inbox, childRoutes: [ { path: "/messages/:id", component: Message }, { path: "messages/:id", onEnter: function (nextState, replaceState) { //do something } } ] } ] } ] React.render(3.按需加載的路由配置, document.body)
在大型應(yīng)用中,性能是一個(gè)很重要的問題,按需要加載JS是一種優(yōu)化性能的方式。在React router中不僅組件是可以異步加載的,路由也是允許異步加載的。Route 可以定義 getChildRoutes,getIndexRoute 和 getComponents 這幾個(gè)函數(shù),他們都是異步執(zhí)行的,并且只有在需要的時(shí)候才會(huì)調(diào)用。
我們看一個(gè)例子:
const CourseRoute = { path: "course/:courseId", getChildRoutes(location, callback) { require.ensure([], function (require) { callback(null, [ require("./routes/Announcements"), require("./routes/Assignments"), require("./routes/Grades"), ]) }) }, getIndexRoute(location, callback) { require.ensure([], function (require) { callback(null, require("./components/Index")) }) }, getComponents(location, callback) { require.ensure([], function (require) { callback(null, require("./components/Course")) }) } }
這種方式需要配合webpack中有實(shí)現(xiàn)代碼拆分功能的工具來用,其實(shí)就是把路由拆分成小代碼塊,然后按需加載。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/84270.html
摘要:都會(huì)造成錯(cuò)誤,注意一定一定嚴(yán)格的用,所以我建議直接復(fù)制我的。因?yàn)橛玫脑捤麜?huì)轉(zhuǎn)義代碼,寫不寫其實(shí)一個(gè)樣。不可避免的,構(gòu)建肯定是要用到的。這個(gè)時(shí)候一般用的是在外面保存然后里面調(diào)用第二個(gè)坑更隱蔽。 目標(biāo)人群 獻(xiàn)給熟悉基礎(chǔ)的React語(yǔ)法的剛接觸React的同學(xué)~ 如果你已經(jīng)寫過半年以上的React那也不用看了,畢竟我水平并不高 Whats React React 是一個(gè)不存在的網(wǎng)絡(luò)公司Fac...
摘要:但是使用標(biāo)記將告訴瀏覽器處理路由就像服務(wù)器端路由一樣。組件需要一個(gè)稱為的屬性指向要渲染的客戶端路由。發(fā)生這種情況的原因是響應(yīng)路由器將渲染與路徑匹配的所有內(nèi)容除非另有指定。屬性預(yù)計(jì)將是一個(gè)函數(shù)將在對(duì)象連同和路由配置時(shí)調(diào)用。 本文轉(zhuǎn)載自:眾成翻譯譯者:iOSDevLog鏈接:http://www.zcfy.cc/article/3815原文:https://www.fullstackrea...
摘要:如何實(shí)現(xiàn)前端路由要實(shí)現(xiàn)前端路由,需要解決兩個(gè)核心如何改變卻不引起頁(yè)面刷新如何檢測(cè)變化了下面分別使用和兩種實(shí)現(xiàn)方式回答上面的兩個(gè)核心問題。 原文鏈接:github.com/whinc/blog/… 在單頁(yè)應(yīng)用如此流行的今天,曾經(jīng)令人驚嘆的前端路由已經(jīng)成為各大框架的基礎(chǔ)標(biāo)配,每個(gè)框架都提供了強(qiáng)大的路由功能,導(dǎo)致路由實(shí)現(xiàn)變的復(fù)雜。想要搞懂路由內(nèi)部實(shí)現(xiàn)還是有些困難的,但是如果只想了解路由實(shí)現(xiàn)基本...
摘要:最近兩三周在主要在寫,在這里寫一下,算是個(gè)總結(jié)。但是打算換成,它是推薦用或,就這樣決定把之前的換成了。這里面主要的問題是作用域??傊膊]有那么難。目前看來確實(shí)是非常適合于前后端分離的。 最近兩三周在主要在寫 React,在這里寫一下,算是個(gè)總結(jié)。 webpack 我們的后端語(yǔ)言用的是 Go, 對(duì)于寫網(wǎng)站來說,Go 并沒有好的前端資源(js, css,image)的管理方式(打包,壓縮...
摘要:官方文檔中文文檔基本使用注意一定要在根目錄的中聲明,要不然點(diǎn)擊任何鏈接都無法跳轉(zhuǎn)。官方文檔中文文檔簡(jiǎn)單的來說,每一次的修改狀態(tài)都需要觸發(fā),然而其實(shí)項(xiàng)目中我現(xiàn)在還沒用到修改數(shù)據(jù)。。。 學(xué)習(xí) React 的過程中實(shí)現(xiàn)了一個(gè)個(gè)人主頁(yè),沒有復(fù)雜的實(shí)現(xiàn)和操作,適合入門 ~ 原文地址:https://github.com/axuebin/react-blog/issues/17 這個(gè)項(xiàng)目其實(shí)功能...
閱讀 1354·2021-11-15 11:37
閱讀 2228·2021-09-23 11:21
閱讀 1310·2019-08-30 15:55
閱讀 2119·2019-08-30 15:55
閱讀 2826·2019-08-30 15:52
閱讀 2832·2019-08-30 11:12
閱讀 1587·2019-08-29 18:45
閱讀 1899·2019-08-29 14:04