react router零基礎(chǔ)使用教程
安裝
既然學(xué)習(xí) react router 就免不了運(yùn)行 react
安裝 react
npx create-react-app my-app
cd my-app
npm start
安裝 react router
npm install react-router-dom
如果一切正常,就讓我們打開(kāi) index.js 文件。
配置路由
引入 react-router-dom 的 RouterProvider
import {RouterProvider} from 'react-router-dom'
設(shè)置
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
<React.StrictMode>
<RouterProvider router={routers}></RouterProvider>
</React.StrictMode>
);這里的 React.StrictMode 代表以嚴(yán)格模式執(zhí)行其包含的內(nèi)容。
為了管理路由,讓我們?cè)賱?chuàng)建一個(gè) root.js 文件
內(nèi)容如下:
文件:router.js
import {createBrowserRouter} from 'react-router-dom'
import App from '../App.js'
const router = createBrowserRouter ([
{
path:'/',
element:<App />,
}
])
export default router;添加一個(gè)新頁(yè)面測(cè)試路由
新建文件:
test.js
export default function Test(){
return(
<div>測(cè)試頁(yè)面</div>
)
}
在 router.js 引入
import {createBrowserRouter} from 'react-router-dom'
import App from '../App.js'
import Test from '../test.js'
const router = createBrowserRouter ([
{
path:'/',
element:<App />,
},
{
path:'/test',
element:<Test />
}
])
export default router;保存
在瀏覽器訪問(wèn) http://localhost:3000/test
你應(yīng)該可以看到:

配置未找到的路由
現(xiàn)在我們有 App.js 和 test.js 兩個(gè)頁(yè)面,如果訪問(wèn) http://localhost:3000/hello 會(huì)出現(xiàn)什么呢?

這是內(nèi)置的頁(yè)面,提醒用戶沒(méi)有找到頁(yè)面。
接下來(lái)使用美化或者自定義的頁(yè)面:
創(chuàng)建文件:
error.js
export default function Error(){
return (
<h1>Page not found</h1>
)
}
使用 errorElement屬性 對(duì)應(yīng)這個(gè)頁(yè)面:
import {createBrowserRouter} from 'react-router-dom'
import App from '../App.js'
import Test from '../test.js'
import Error from '../error.js'
const router = createBrowserRouter ([
{
path:'/',
element:<App />,
errorElement:<Error />
},
{
path:'/test',
element:<Test />
}
])
export default router;繼續(xù)請(qǐng)求 http://localhost:3000/hello

我們剛才自定義的頁(yè)面成功展示出來(lái)了。
跳轉(zhuǎn)頁(yè)面
跳轉(zhuǎn)頁(yè)面有很多,這里取兩種方式,一是通過(guò) dom 標(biāo)簽,二是通過(guò)js
通過(guò) js
使用 useNavigate 跳轉(zhuǎn)頁(yè)面:
看起來(lái)就像這樣:
test.js
import { useNavigate } from "react-router-dom";
function Test () {
const navigate = useNavigate();
function toTest2(){
navigate("/test2",{
state:'anny'
});
}
return(
<div onClick={toTest2}>跳轉(zhuǎn)頁(yè)面</div>
)
}
export default Test使用 useLocation 接收值:
import {useLocation} from 'react-router-dom'
export default function Test2(){
let location = useLocation();
return (
<div>頁(yè)面Test2 接收到的值為 {location.state}</div>
)
}通過(guò) dom
通過(guò) Link 傳值跳轉(zhuǎn):
import {Link } from "react-router-dom";
function Test () {
return(
<div>
<Link to="/test2" state={'anny'} >跳轉(zhuǎn)頁(yè)面</Link>
</div>
)
}
export default Test使用 useLocation 接收值:
import {useLocation} from 'react-router-dom'
export default function Test2(){
let location = useLocation();
return (
<div>頁(yè)面Test2 接收到的值為 {location.state}</div>
)
}嵌套頁(yè)面
平時(shí)寫管理后臺(tái),經(jīng)常會(huì)看到左右分布的布局,如果僅僅依靠 1-5 節(jié)的內(nèi)容肯定很難實(shí)現(xiàn),接下來(lái)看一下 根布局。
根布局使用 :
創(chuàng)建一個(gè) 父頁(yè)面,父頁(yè)面放置兩個(gè) 鏈接:
parent.js
import { Link, Outlet } from "react-router-dom";
function Parent(){
return(
<div>
<Link to={'/parent/page1'}>show page1</Link>
<Link to={'/parent/page2'}>show page2</Link>
<Outlet></Outlet>
</div>
)
}
export default Parent;
繼續(xù)創(chuàng)建 兩個(gè)頁(yè)面 page1.js page2.js
page1.js
function Page1(){
return(
<div>i am page1</div>
)
}
export default Page1;page2.js
function Page2(){
return(
<div>i am page2</div>
)
}
export default Page2;修改我們的 router.js 文件:
import {createBrowserRouter} from 'react-router-dom'
import App from '../App.js'
import Test from '../test.js'
import Error from '../error.js'
import Parent from '../parent.js'
import Page1 from '../page1.js'
import Page2 from '../page2.js'
const router = createBrowserRouter ([
{
path:'/',
element:<App />,
errorElement:<Error />,
},
{
path:'/test',
element:<Test />
},
{
path:'/parent',
element:<Parent />,
children:[
{
path:'/parent/page1',
element:<Page1 />
},
{
path:'/parent/page2',
element:<Page2 />
}
]
}
])
export default router;到這里還差一步,就是使用重要的標(biāo)簽 <Outlet>
修改我們的父頁(yè)面
parent.js
import { Link, Outlet } from "react-router-dom";
function Parent(){
return(
<div>
<Link to={'/parent/page1'}>show page1</Link>
<Link to={'/parent/page2'}>show page2</Link>
<Outlet></Outlet>
</div>
)
}
export default Parent;
保存:
接下來(lái)訪問(wèn) http://localhost:3000/parent 你將看到:

分別點(diǎn)擊 show page1 和 show page2 你將看到不同的效果。
如果你想將第一個(gè)子組件默認(rèn)展示出來(lái),你可以將 router.js 改成如下:
{
path:'/parent',
element:<Parent />,
children:[
{
path:'/parent',
element:<Page1 />
},
{
path:'/parent/page2',
element:<Page2 />
}
]
}
再看一下效果:

到此這篇關(guān)于react router零基礎(chǔ)使用教程的文章就介紹到這了,更多相關(guān)react router內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vue路由權(quán)限和按鈕權(quán)限的實(shí)現(xiàn)示例
本文主要介紹了vue路由權(quán)限和按鈕權(quán)限的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-04-04
Vue實(shí)現(xiàn)Chrome小恐龍游戲的示例代碼
Google 給 Chrome 瀏覽器加了一個(gè)有趣的彩蛋,本文就詳細(xì)的介紹一下Vue實(shí)現(xiàn)Chrome小恐龍游戲的示例代碼,具有一定的參考價(jià)值,感興趣的可以了解一下2022-04-04
解決element DateTimePicker+vue彈出框只顯示小時(shí)
這篇文章主要介紹了解決element DateTimePicker+vue彈出框只顯示小時(shí),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03
vue開(kāi)發(fā)移動(dòng)端使用better-scroll時(shí)click事件失效的解決方案
這篇文章主要介紹了vue開(kāi)發(fā)移動(dòng)端使用better-scroll時(shí)click事件失效的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07
vue實(shí)現(xiàn)動(dòng)態(tài)路由詳細(xì)
我們開(kāi)發(fā)后臺(tái)管理系統(tǒng)過(guò)程中,會(huì)由不同的人操作系統(tǒng),有admin(管理員)、superAdmin(超管),及各種運(yùn)營(yíng)、財(cái)務(wù)人員。為了區(qū)別這些人員,會(huì)給不同的人分配不一樣的角色來(lái)展示不同的菜單,這就必須要通過(guò)動(dòng)態(tài)路由來(lái)實(shí)現(xiàn)。下面就來(lái)介紹vue實(shí)現(xiàn)動(dòng)態(tài)路由,需要的朋友可參考一下2021-10-10
vue2與vue3下如何訪問(wèn)使用public下的文件
這篇文章主要介紹了vue2與vue3下如何訪問(wèn)使用public下的文件,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-05-05
vue3輸入框生成的時(shí)候如何自動(dòng)獲取焦點(diǎn)詳解
記錄一下自己最近開(kāi)發(fā)vue3.0的小小問(wèn)題,下面這篇文章主要給大家介紹了關(guān)于vue3輸入框生成的時(shí)候如何自動(dòng)獲取焦點(diǎn)的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-09-09

