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
如果一切正常,就讓我們打開 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)容。
為了管理路由,讓我們再創(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è)新頁面測試路由
新建文件:
test.js
export default function Test(){
return(
<div>測試頁面</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;保存
在瀏覽器訪問 http://localhost:3000/test
你應(yīng)該可以看到:

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

這是內(nèi)置的頁面,提醒用戶沒有找到頁面。
接下來使用美化或者自定義的頁面:
創(chuàng)建文件:
error.js
export default function Error(){
return (
<h1>Page not found</h1>
)
}
使用 errorElement屬性 對應(yīng)這個(gè)頁面:
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ù)請求 http://localhost:3000/hello

我們剛才自定義的頁面成功展示出來了。
跳轉(zhuǎn)頁面
跳轉(zhuǎn)頁面有很多,這里取兩種方式,一是通過 dom 標(biāo)簽,二是通過js
通過 js
使用 useNavigate 跳轉(zhuǎn)頁面:
看起來就像這樣:
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)頁面</div>
)
}
export default Test使用 useLocation 接收值:
import {useLocation} from 'react-router-dom'
export default function Test2(){
let location = useLocation();
return (
<div>頁面Test2 接收到的值為 {location.state}</div>
)
}通過 dom
通過 Link 傳值跳轉(zhuǎn):
import {Link } from "react-router-dom";
function Test () {
return(
<div>
<Link to="/test2" state={'anny'} >跳轉(zhuǎn)頁面</Link>
</div>
)
}
export default Test使用 useLocation 接收值:
import {useLocation} from 'react-router-dom'
export default function Test2(){
let location = useLocation();
return (
<div>頁面Test2 接收到的值為 {location.state}</div>
)
}嵌套頁面
平時(shí)寫管理后臺,經(jīng)常會(huì)看到左右分布的布局,如果僅僅依靠 1-5 節(jié)的內(nèi)容肯定很難實(shí)現(xiàn),接下來看一下 根布局。
根布局使用 :
創(chuàng)建一個(gè) 父頁面,父頁面放置兩個(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è)頁面 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>
修改我們的父頁面
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;
保存:
接下來訪問 http://localhost:3000/parent 你將看到:

分別點(diǎn)擊 show page1 和 show page2 你將看到不同的效果。
如果你想將第一個(gè)子組件默認(rèn)展示出來,你可以將 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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Vue后臺管理系統(tǒng)權(quán)限控制與動(dòng)態(tài)路由的實(shí)現(xiàn)
本文主要介紹了Vue后臺管理系統(tǒng)權(quán)限控制與動(dòng)態(tài)路由的實(shí)現(xiàn),可以根據(jù)用戶的角色靈活控制頁面訪問權(quán)限,提高系統(tǒng)的安全性和用戶體驗(yàn),感興趣的可以了解一下2025-04-04
vue將毫秒數(shù)轉(zhuǎn)化為正常日期格式的實(shí)例
今天小編就為大家分享一篇vue將毫秒數(shù)轉(zhuǎn)化為正常日期格式的實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-09-09
vue如何實(shí)現(xiàn)el-select下拉選項(xiàng)的懶加載
這篇文章主要介紹了vue如何實(shí)現(xiàn)el-select下拉選項(xiàng)的懶加載,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-04-04
vue-auto-focus: 控制自動(dòng)聚焦行為的 vue 指令方法
今天小編就為大家分享一篇vue-auto-focus: 控制自動(dòng)聚焦行為的 vue 指令方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-08-08
vscode配置@路徑提示方式,并解決vue文件內(nèi)失效的問題
這篇文章主要介紹了vscode配置@路徑提示方式,并解決vue文件內(nèi)失效的問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-10-10
Vue+ElementUI踩坑之動(dòng)態(tài)顯示/隱藏表格的列el-table-column問題
這篇文章主要介紹了Vue+ElementUI踩坑之動(dòng)態(tài)顯示/隱藏表格的列el-table-column問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-11-11
vue.js通過自定義指令實(shí)現(xiàn)數(shù)據(jù)拉取更新的實(shí)現(xiàn)方法
數(shù)據(jù)拉取更新這個(gè)功能相信大家基本都見過,但是如果要做起來卻不止如何做起,所以這篇文章給大家分享了vue.js通過自定義指令實(shí)現(xiàn)的方法,閱讀本文需要對vue有一定理解,有需要的朋友們下面來一起看看吧。2016-10-10

