You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
import{useHistory}from"react-router-dom";constContact=()=>{consthistory=useHistory();return(<Fragment><h1>Contact</h1><buttononClick={()=>history.push("/")}>Go to home</button></Fragment>);};
useParams
constAbout=()=>{const{ name }=useParams();return(// props.match.params.name<Fragment>{name!=="John Doe" ? <Redirectto="/"/> : null}<h1>About {name}</h1><Routecomponent={Contact}/></Fragment>);};
一、是什么
react-router
等前端路由的原理大致相同,可以实现无刷新的条件下切换显示不同的页面路由的本质就是页面的
URL
发生改变时,页面的显示结果可以根据URL
的变化而变化,但是页面不会刷新因此,可以通过前端路由可以实现单页(SPA)应用
react-router
主要分成了几个不同的包:react-router: 实现了路由的核心功能
react-router-dom: 基于 react-router,加入了在浏览器运行环境下的一些功能
react-router-native:基于 react-router,加入了 react-native 运行环境下的一些功能
react-router-config: 用于配置静态路由的工具库
二、有哪些
这里主要讲述的是
react-router-dom
的常用API
,主要是提供了一些组件:BrowserRouter、HashRouter
Router
中包含了对路径改变的监听,并且会将相应的路径传递给子组件BrowserRouter
是history
模式,HashRouter
模式使用两者作为最顶层组件包裹其他组件
Route
Route
用于路径的匹配,然后进行组件的渲染,对应的属性如下:Link、NavLink
通常路径的跳转是使用
Link
组件,最终会被渲染成a
元素,其中属性to
代替a
标题的href
属性NavLink
是在Link
基础之上增加了一些样式属性,例如组件被选中时,发生样式变化,则可以设置NavLink
的一下属性:如下:
如果需要实现
js
实现页面的跳转,那么可以通过下面的形式:通过
Route
作为顶层组件包裹其他组件后,页面组件就可以接收到一些路由相关的东西,比如props.history
props
中接收到的history
对象具有一些方便的方法,如goBack
,goForward
,push
redirect
用于路由的重定向,当这个组件出现时,就会执行跳转到对应的
to
路径中,如下例子:上述组件当接收到的路由参数
name
不等于tom
的时候,将会自动重定向到首页switch
swich
组件的作用适用于当匹配到第一个组件的时候,后面的组件就不应该继续匹配如下例子:
如果不使用
switch
组件进行包裹除了一些路由相关的组件之外,
react-router
还提供一些hooks
,如下:useHistory
useHistory
可以让组件内部直接访问history
,无须通过props
获取useParams
useLocation
useLocation
会返回当前URL
的location
对象三、参数传递
这些路由传递参数主要分成了三种形式:
动态路由
动态路由的概念指的是路由中的路径并不会固定
例如将
path
在Route
匹配时写成/detail/:id
,那么/detail/abc
、/detail/123
都可以匹配到该Route
获取参数方式如下:
search传递参数
在跳转的路径中添加了一些query参数;
获取形式如下:
to传入对象
传递方式如下:
获取参数的形式如下:
参考文献
The text was updated successfully, but these errors were encountered: