url路径与组件对应的关系

安装插件

  1. npm i react-router-dom

设置路由

在项目的最外层定义路由

  1. // 导入 BorwserRouter组件 或
  2. import {BorwserRouter} from 'react-router-dom';
  3. // 使用BorwserRouter组件包裹整个项目
  4. <BorwserRouter>
  5. <App/>
  6. </BorwserRouter>

配置路由规则

// 导入 Route,Routes
import {Route,Routes} from 'react-router-dom';

// 配置路由规则
<Routes>
  //  path 配置路由路径   element是路径对应的组件
  //  path 为 '/' 时为默认路由
  <Route path='/login' element={<组件/>}></Route>
</Routes>

路由嵌套

 <Route path='/login' element={<组件/>}>
      // index 代表父级路由下的默认路由
        <Route index element={二级组件}></Route>
      <Route path='二级组件路径不加/' element={二级组件}></Route>
</Route>
// 导入 Outlet 组件
// 在一级组件中要显示二级路由的位置添加 Outlet 组件 对应的二级组件就会显示到Outlet的位置

路由跳转

import {Link} from 'react-router-dom';
//  Link 组件 作为跳转按钮 to 属性对应路由路径
<Link to='路径'></Link>

编程式跳转

// 导入 useNavgate 
import {useNavgate} from 'react-router-dom';

//事件处理程序
const navgate = useNavgate()
const handleclick = ()=>{
  // 路由跳转
    navgate('路径')
}

参数传递

// 在 Route 组件 path路径 添加 /:属性 规定路由传递的参数
<Route path='/index/:id' element={<Index />}></Route>

// 传递 
// Link组件 在路径后加/值 即可传递参数
<Link to='/index/1'></Link>

// 接收
  // 导入  useParams 函数
  import {useParams} from 'react-router-dom';

    // 使用
    const params = useParams
  params.id // 拿到的数据

查询参数

// 使用 ? 属性=属性值 方式传递参数

// 接收 
// 导入 useSearchParams 
const [searchParams,setSearchParams] = useSearchParams()
// searchParams 具体的参数对象  名字可以随意起
// setSearchParams 更新参数的方法  名字可以随意起

// 获取参数
searchParams.get('属性')
// 获取参数存放到数组中
searchParams.getAll('属性')

使用router配置路由规则

const router = [
  {
    // 路径
      path:'/',
    // 组件
    element:<组件/>,
    // 子组件
    children:[
      {
        // 默认子路由
          index:true,
        element:<默认子组件/>
      },
      {
        // 需要参数的子组件
       path:'index/:id'
        element:<子组件1/>
      },
    ]
  }
]

export default router

// 在 app.js 中 
// 导入 useRoutes 函数
// 导入路由规则
在app组件内 
return useRoutes(router)

组件懒加载

// 布局或一些固定的组件不要使用懒加载
import {lazy , Suspense} from 'react';
const Login = lazy(()=>import(路径))

// 为懒加载的组件添加loding效果
const lazyLoad = (children) =>{
    return <Suspense fallback={loging效果组件}>{return userRouter(children)}<Suspense>
}

 // 路由的element   
    element:lazyLoad(<Index/>)