react-Router6

576 阅读2分钟

react中的push和replace跳转

push路由跳转是可以跳转到上一级,可以返回的

replace路由跳转是不能返回上一层的

import {NavLink,Routes,Route}  from 'react-router-dom'
<NavLink to='/about'>about</NavLink>
<NavLink to='/Home'>Home</NavLink>
<Routes>
    caseSensitive是否区分大小写默认不区分不写
<Route path='/about' caseSensitive  element={<About/>}></Route>
<Route path='/Home'  element={<Home/>}></Route>
重定向  replace跳转模式默认push
 <Route path='/' replace element={<Navigate to='/about'/>}></Route>
</Routes>
控制点击高亮
<NavLink className={({isActive})=>{return isActive?'www':'eee'}} to='/about'>about</NavLink>

路由表

import { NavLink,  Navigate,useRoutes} from 'react-router-dom'
import routes from './routes'
export default function App() {
  const element=useRoutes(routes)
  return (
    <div>
      <NavLink className={({isActive})=>{return isActive?'www':'eee'}} to='/about'>about</NavLink>
      <NavLink to='/home'>Home</NavLink>
      {element}
    </div>
  )
}

import About from '../page/about'
import Home from '../page/home'
import {  Navigate} from 'react-router-dom'
export default [
    {
      path:'/about',
      element:<About />
    },
    {
      path:'/home',
      element:<Home />
    },
    {
      path:'/',
      element:<Navigate to='/about'/>
    }
  ]

二级路由

二级页面写法
import React from 'react'
import { NavLink, Outlet} from 'react-router-dom'
export default function home() {
  return (
    <div>
       <NavLink className={({isActive})=>{return isActive?'www':'eee'}} to='new'>NEW</NavLink>
       <NavLink className={({isActive})=>{return isActive?'www':'eee'}} to='message'>MESSAGE</NavLink>
        <Outlet></Outlet>    
    </div>
  )
}

import About from '../page/about'
import Home from '../page/home'
import New from '../page/zi/new'
import Message from '../page/zi/message'
import {  Navigate} from 'react-router-dom'
export default [
    {
      path:'/about',
      element:<About />,
    },
    {
      path:'/home',
      element:<Home />,
      children:[
        {
            path:'new',
            element:<New />
          },
        {
            path:'message',
            element:<Message />
          },
      ]
    },
    {
      path:'/',
      element:<Navigate to='/about'/>
    }
  ]

路由的params参数

  {
            path:'new/:id/:title',
            element:<New />
   },
<NavLink className={({isActive})=>{return isActive?'www':'eee'}} to='new/13/19'>NEW</NavLink>

获取params参数
import {useParams} from 'react-router-dom'
let a=useParams()
let {id,title}=useParams()

获取params参数
import {useMatch} from 'react-router-dom'
let a=useMatch('home/new/id/title')

路由的search参数

import React from 'react'
import { NavLink, Outlet} from 'react-router-dom'
export default function home() {
  return (
    <div>
       <NavLink className={({isActive})=>{return isActive?'www':'eee'}} to='new?id=123&title=456'>NEW</NavLink>
       <NavLink className={({isActive})=>{return isActive?'www':'eee'}} to='message'>MESSAGE</NavLink>
        <Outlet></Outlet>    
    </div>
  )
}

import React from 'react'
import {useSearchParams} from 'react-router-dom'
export default function New(props) {
    let [search,setSearch]=useSearchParams()
    get方法获取
    console.log(search.get('id'));
    setSearch是修改传递参数方法
  return (
    <div>
      <button onClick={()=>{setSearch('id=186&title=789')}}></button>
    </div>
  )
}

state参数

import React from 'react'
import { NavLink, Outlet} from 'react-router-dom'
export default function home() {
  return (
    <div>
       <NavLink className={({isActive})=>{return isActive?'www':'eee'}} to='new' state={{
         id:10086,
         title:789
       }}>NEW</NavLink>
       <NavLink className={({isActive})=>{return isActive?'www':'eee'}} to='message'>MESSAGE</NavLink>
<Outlet></Outlet>    
    </div>
  )
}

import React from 'react'
import {useLocation} from 'react-router-dom'
export default function New(props) {
    let {state}=useLocation()
    console.log(state);
  
  return (
    <div>
      <button >46</button>
    </div>
  )
}

编程式

只能传递state参数
import React from 'react'
import {  NavLink, Outlet,useNavigate} from 'react-router-dom'
export default function Home() {
  const navigate=useNavigate()
  function showNavigates(){
    navigate('new',{
      replace:false,
      state:{
         id:13,
         title:852
      }
    })
  }
  return (
    <div>
       <button onClick={()=>{showNavigates()}}>new</button>
       <NavLink className={({isActive})=>{return isActive?'www':'eee'}} to='message'>MESSAGE</NavLink>
        <Outlet></Outlet>    
    </div>
  )
}

useInRouterContext

判断组件是否处在路由上下文环境中  返回值布尔值
被BrowserRouter包裹
console.log(useInRouterContext())
你是第三方组件封装者需要判断是否在路由环境中

useNavigationType

作用:返回当前的导航类型(用户是如何来到当前页面的)
返回值: pop    指在浏览器中直接打开了这个路由组件(刷新页面)
      push replace

useOutlet

用来呈现当前组件中渲染的嵌套路由
如果嵌套路由没有挂载则是null
如果已经挂载则展示嵌套的路由对象
 const result = useOutlet()
  console.log(result)

useResolvedPath

给定一个URL值 解析其中的 path search hash值
useResolvedPath('/new?id=123&title=789#qwe')
URL值随便写
hash: "#qwe"
pathname: "/new"
search: "?id=123&title=789"
[[Prototype]]: Object