1.useRoutes()
2. useNavigate()
3. useParams()
4. useSearchParams()
5. useLocation()
6. useMatch()
7. useInRouterContext()
8. useNavigationType()
9. useOutlet()
10. useResolvedPath()
根据路由表,动态创建
和
import { useRoutes } from 'react-router-dom'// 定义路由表
const elements = useRoutes([{path: '/about',element:
}, {path: '/home',element:
}, {path: '/',element:
}])// 在配置路由管理的地方直接插入即可
{elements}// 子路由直接使用 标签占位即可
返回一个函数用来实现编程式路由导航
import { useNavigate } from 'react-router-dom'navigat('detail', {replace: false,state: message
})
接收当前路由的 params
参数,对标 5 路由组件的 match.params
import { useParams } from 'react-router-dom'const { x, xx, xxx } = useParams()// 也可以用 useMatch 但是正常人不会用的,因为它需要传入全路径:
// useMatch('/home/message/detail/:id/:title/:info')
用于读取和修改当前路由 URL 中的查询字符串(就是search参数)
返回一个包含两个值的数组:当前search集合,更新search集合的函数
import { useSearchParams } from 'react-router-dom'// 获取search参数
const [search, setSearch] = useSearchParams()
const x = search.get('x')
const xx = search.get('xx')
const xxx = search.get('xxx')// 修改search参数
setSearch('x=5000&xx=新标题&xxx=小猪佩奇')
获取当前路由 loacation
值,对标 5 路由组件的 location
属性
import { useLocation } from 'react-router-dom'// 直接连续结构获取 location 中的 state 的属性
const { state: { id, title, info } } = useLocation()
返回当前匹配信息,对标 5 路由组件的 match
属性
非特殊情况正常人不会用的,因为它需要传入全路径:
// 路由配置
}/>// Message组件引入 useParams
import { useParams } from 'react-router-dom'
// Message组件获取匹配信息
const match = useMatch('/home/message/detail/:id/:title/:info')// match 对象输出如下(其他方式传参pathxxx不会有后缀)
{params: {},pathname: "/home/message/detail/x/xx/xxx",pathnameBase: "/home/message/detail/x/xx/xxx",pattern: {path: "/home/message/detail/:id/:title/:info"caseSensitive: false,end: true,}
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-h5cky9JS-1670030848477)(react_router_6.assets/image-20221203092512690.png)]
Router
的上下文中呈现(处在路由组件内),则 useInRouterContext()
钩子返回 true,否则返回 falsePOP
、PUSH
、REPLACE
POP
是指在浏览器中直接打开了这个路由组件(刷新页面或者路由首页)const result = useOutlet()
// 如果嵌套路由没挂载:null
// 如果嵌套路由已挂载:嵌套路由对象