Bootstrap

react crash course 2024(7) react router dom

安装

npm i react-router-dom

引入

import {Route,createBrowserRouter,createRoutesFromElements,RouterProvider} from 'react-router-dom'

在app.jsx

const router = createBrowserRouter(
  createRoutesFromElements(<Route index element = {<h1>My App</h1>}/>)
)

const App = () => {
  return <RouterProvider router={router}/>
}

使用object写路由

const router = createBrowserRouter([
  {
    path:"/",
    element:(
      <h2>hello rainbow</h2>
    )
  },{
    path:"about",
    element:<h2>little puppy</h2>
  }
])

或直接使用<Route/>组件写路由

const router = createBrowserRouter(
  createRoutesFromElements(
  <Route path='/' element={<h2>hello rainbow</h2>}></Route>
))

路由嵌套

const router = createBrowserRouter(
  createRoutesFromElements(
  <Route path='/' element={<MainLayout/>}>
    <Route   path="contact" element = {<h5 >some peopel just bad</h5>}/>
  </Route>
))

别忘了放子路由出口

在父 route 元素中使用outlet来渲染其子 route 元素。这允许在渲染子路由时显示嵌套 UI。

动态传参

      {/* :id 表示id是动态的 */}
      <Route path='/job/:id' element={<JobPage/>}/>
  • Link跳转

1.引入

import { Link } from 'react-router-dom'

2.使用

<a
href="/jobs"
 className="text-white hover:bg-gray-900 hover:text-white rounded-md px-3 py-2"
>Jobs</a> 


<Link
to="/index"
className="text-white bg-black hover:bg-gray-900 hover:text-white rounded-md px-3 py-2">Home</Link>

原有的a标签 href跳转可以改成Link 的 to,浏览器不会刷新一次再加载 

 3.active link

  • NotFoundPages
    <Route path='/' element={<MainLayout />}>
      <Route index element={<HomePage />} />
      <Route path='/jobs' element={<JobsPage/>}/>
      {/* 包罗万象 */}
      <Route path='*' element={<NotFoundPages/>}/>
    </Route>
import { Link } from "react-router-dom"
import { FaExclamationTriangle } from "react-icons/fa"
const NotFoundPages = () => {
  return (
    <section className="text-center flex flex-col justify-center items-center h-96">
   <FaExclamationTriangle className="fas fa-exclamation-triangle text-yellow-400 fa-4x mb-4"/>
    <h1 className="text-6xl font-bold mb-4">404 Not Found</h1>
    <p className="text-xl mb-5">This page does not exist</p>
    <Link
      to="/"
      className="text-white bg-indigo-700 hover:bg-indigo-900 rounded-md px-3 py-2 mt-4"
      >Go Back</Link
    >
  </section>
  )
}

export default NotFoundPages

4.获得路由中带的参数

import { useParams } from "react-router-dom";
 const {id} = useParams();

;