Skip to content

react-router-dom 路由

创建路由

js
// 创建使用路由 router/index.js
import Login from '../page/Login'
import Article from '../page/Article'

import {createBrowserRouter} from 'react-router-dom'
import React from 'react'
const router = createBrowserRouter([
    {
        path:"/login",
        element: <Login></Login>
    },    {
        path:"/article",
        element: <Article></Article>
    }
])
export default router;

// 引入路由 index.js
import {RouterProvider} from 'react-router-dom'
import router from './router'
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
    <React.StrictMode>
        <RouterProvider router={router}>
        </RouterProvider>
    </React.StrictMode>
);

路由跳转

js
// 路由跳转 router/login.js
import { Link,useNavigate } from 'react-router-dom'
// 1.编程式跳转
function Button(){
    const navigate = useNavigate();
    return <button onClick={()=>navigate('/article')}>跳转</button> 
}

//2.声明式跳转
function Button(){
    return <Link to='/article' />
}

路由传参1

js
// 路由传参 1
// Login/index.js
import {useNavigate} from 'react-router-dom'
const Login = () => {
    let navigate = useNavigate();
    return (
        <div>
            <button onClick={()=>navigate("/article?id=1001")}>searchParams传参</button>
        </div>
    )
}
export default Login;
// Article/index.js
import { useSearchParams } from 'react-router-dom'
const Article = ()=>{
    const [params] =  useSearchParams()
    const id = params.get('id')
    console.log(id)
    return (
        <div>
            <h1>Article</h1>
        </div>
    )
}
export default  Article

路由传参2

js
// 路由传参 2
// router/index.js
const router = createBrowserRouter([
    {
        path:"/login",
        element: <Login></Login>
    },    {
        path:"/article/:id",
        element: <Article></Article>
    }
])
// Login/index.js
import {useNavigate} from 'react-router-dom'
const Login = () => {
    let navigate = useNavigate();
    return (
        <div>
            <button onClick={()=>navigate("/article/1001")}>Params传参</button>
        </div>
    )
}
export default Login;

// Article/index.js
import { useParams } from 'react-router-dom'
const Article = ()=>{
    const params =  useParams()
    const id = params.id
    console.log(id)
    return (
        <div>
            <h1>Article</h1>
        </div>
    )
}
export default  Article

嵌套路由

js
// 嵌套路由
//router/index.js
const router = createBrowserRouter([
    {
        path:'/',
        element:<Layout></Layout>  ,
        children:[
            {
                path:'board',
                element:<Board></Board>
            }, {
                path:'about',
                element:<About></About>
            }
        ]
    },
    {
        path:"/login",
        element: <Login></Login>
    },    {
        path:"/article/:id",
        element: <Article></Article>
    }
])

//  Layout/index.js
import { Link, Outlet } from 'react-router-dom'
const Layout = () => {
    return (
        <div>
            <div>我是一级路由
            </div>
            <Link to="/board">面板</Link>
            <Link to="/about">关于</Link>
            <Outlet></Outlet>
        </div>
    
    )
}
export default Layout

打包路由懒加载

js
import Layout from '@/pages/Layout'
import Login from '@/pages/Login'
import {createBrowserRouter} from 'react-router-dom'
import { lazy, Suspense } from 'react'

const Home= lazy(()=>import('@/pages/Home'))

const router = createBrowserRouter([
    {path:'/',
    element: <Layout/>,
        children:[
            {
                index:true,
                element: <Suspense fallback={"加载中"}> <Home/></Suspense>
            }
        ]
    },
    {path:'/login',
    element: <Login/>
    },
]
)
export default router

Released under the MIT License.