当前位置: 首页> 健康> 科研 > ReactRouter6快速入门教程

ReactRouter6快速入门教程

时间:2025/8/23 17:44:38来源:https://blog.csdn.net/qq_37703224/article/details/141335792 浏览次数:0次

快速入门案例

main.ts

import { createRoot } from "react-dom/client"
import App from "./App.tsx"
import { BrowserRouter, Route, Routes } from "react-router-dom"function Hello() {return <h2>hello页面</h2>
}createRoot(document.getElementById("root")!).render(<BrowserRouter><Routes><Route path="/" element={<App />} /><Route path="/hello" element={<Hello />} /></Routes></BrowserRouter>
)

跳转页面

import { NavLink } from "react-router-dom"function App() {return (<><div><div><NavLink to="/hello">跳转/hello</NavLink></div><h1>App页面</h1></div></>)
}export default App

返回上一个页面

function Hello() {return (<div><h2>hello页面</h2><Link to="..">返回上一页</Link></div>)
}

重定向

<Route path="/hello2" element={<Navigate to="/hello" />} />

点击按钮跳转页面

import { NavLink, useNavigate } from "react-router-dom"function App() {const navigate = useNavigate()const handleClick = () => {navigate("/hello")}return (<><div><div><NavLink to="/hello">hello</NavLink><button onClick={handleClick}>hello2</button></div><h1>App页面</h1></div></>)
}export default App

404页面跳转

import { createRoot } from "react-dom/client"
import App from "./App.tsx"
import { HashRouter, Link, Route, Routes } from "react-router-dom"function Hello() {return (<div><h2>hello页面</h2><Link to="..">返回上一页</Link></div>)
}function NotFound() {return <h1>404 页面找不到</h1>
}createRoot(document.getElementById("root")!).render(<HashRouter><Routes><Route path="/" element={<App />} /><Route path="/hello" element={<Hello />} /><Route path="*" element={<NotFound />} /></Routes></HashRouter>
)

封装路由模块

router.tsx

import { Link, useRoutes } from "react-router-dom"
import App from "./App.tsx"function Hello() {return (<div><h2>hello页面</h2><Link to="..">返回上一页</Link></div>)
}function NotFound() {return <h1>404 页面找不到</h1>
}function BaseRouter() {return useRoutes([{ path: "/", element: <App /> },{ path: "/hello", element: <Hello /> },{ path: "*", element: <NotFound /> }])
}export default BaseRouter

main.ts中使用:

import { createRoot } from "react-dom/client"
import { HashRouter } from "react-router-dom"
import BaseRouter from "./router.tsx"createRoot(document.getElementById("root")!).render(<HashRouter><BaseRouter /></HashRouter>
)

优化路由模块

router.tsx

import { createHashRouter, Link } from "react-router-dom"
import App from "./App.tsx"function Hello() {return (<div><h2>hello页面</h2><Link to="..">返回上一页</Link></div>)
}function NotFound() {return <h1>404 页面找不到</h1>
}const router = createHashRouter([{ path: "/", element: <App /> },{ path: "/hello", element: <Hello /> },{ path: "*", element: <NotFound /> }
])export default router

main.tsx中使用:

import { createRoot } from "react-dom/client"
import { RouterProvider } from "react-router-dom"
import router from "./router.tsx"createRoot(document.getElementById("root")!).render(<RouterProvider router={router} />)

动态路由

router.tsx

import { createHashRouter, Link, useParams } from "react-router-dom"
import App from "./App.tsx"function BlogDetail() {const params = useParams()return (<div><h2>博客详情页面</h2><h2>要获取的文章ID{params.id}</h2><Link to="..">返回上一页</Link></div>)
}function NotFound() {return <h1>404 页面找不到</h1>
}const router = createHashRouter([{ path: "/", element: <App /> },{ path: "/blog/:id", element: <BlogDetail /> },{ path: "*", element: <NotFound /> }
])export default router

访问:

<NavLink to="/blog/1">博客1</NavLink>
<NavLink to="/blog/2">博客2</NavLink>

嵌套路由

router.tsx

import { createHashRouter, Outlet } from "react-router-dom"
import App from "./App.tsx"function Layout() {return (<div><h2>头部</h2><div><Outlet /></div><h2>底部</h2></div>)
}function NotFound() {return <h1>404 页面找不到</h1>
}const router = createHashRouter([{ path: "/", element: <App /> },{path: "/layout",element: <Layout />,children: [{ path: "body1", element: <div>身体1</div> },{ path: "body2", element: <div>身体2</div> }]},{ path: "*", element: <NotFound /> }
])export default router

访问:

<NavLink to="/layout/body1">布局1</NavLink>
<NavLink to="/layout/body2">布局2</NavLink>

通过loader加载数据

import { createHashRouter, Outlet } from "react-router-dom"
import App from "./App.tsx"function Layout() {return (<div><h2>头部</h2><div><Outlet /></div><h2>底部</h2></div>)
}function NotFound() {return <h1>404 页面找不到</h1>
}function layoutLoader() {console.log("xxx")return "hello"
}const router = createHashRouter([{ path: "/", element: <App /> },{path: "/layout",element: <Layout />,loader: layoutLoader,children: [{ path: "body1", element: <div>身体1</div> },{ path: "body2", element: <div>身体2</div> }]},{ path: "*", element: <NotFound /> }
])export default router

loader 获取路径参数

function layoutLoader({ params }: any) {console.log("xxx", params.id)return "hello"
}

使用loader实现权限拦截的功能

function layoutLoader({ params }: any) {// 权限拦截:如果没有token,就跳转到登录页面const token = ""if (!token) {return redirect("/login")}console.log("xxx", params.id)return "hello"
}
关键字:ReactRouter6快速入门教程

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: