react中路由的扩展使用(NavLink、Switch、Redirect、精准匹配与模糊匹配)

一、NavLink的使用

1.1NavLink 和普通的 Link 都可以用来进行路由跳转。它们之间的区别在于:

NavLink 组件在页面中渲染为一个 a 标签,默认会添加 active class,用于标识当前路由。可以通过 activeClassName 和 activeStyle 自定义 active class 和样式。

NavLink 可以通过 exact 属性来指定是否精确匹配路由,如果为 true 则只匹配路由完全相同的情况,否则会按照路径前缀的方式匹配。例如,如果 NavLink 的 to 属性为 /users,则精确匹配指的是只有在路径为 /users 时才会被选中,非精确匹配指的是在路径为 /users/* 时都会被选中,包括 /users/1、/users/2 等。

NavLink 还可以通过 activeClassName 和 activeStyle 的设置来自定义选中样式。

总之,NavLink 是一个能够更好地帮助我们完成路由选中状态标识的组件。如果只是简单的进行路由跳转,使用 Link 即可。
1.2 NavLink的导入

import { NavLink} from 'react-router-dom'

1.3 NavLink的使用

{/* Navlink :当被点击时添加一个类名 active */}
                <NavLink className="list-group-item " to='/about'>About</NavLink>
                <NavLink className="list-group-item " to='/home'>Home</NavLink>
  

二、Switch标签 和 Redirect标签 的使用

2.1、在 React 中,Switch 标签是 React Router 中提供的一个组件,它的主要作用是用来选择性地渲染一个路由。

原本的路由匹配会匹配所有的路由,就算已经匹配成功了,还是会继续往下匹配。

Switch 组件会在所有的子组件中寻找第一个与当前路径匹配的 Route 组件,并且仅渲染该组件。
2.2、Switch 和 Redirect 的导入

import { Redirect, Switch } from 'react-router-dom'

2.3、Switch 和 Redirect的使用
通常情况下 path 和 component 是一一对应的关系
用 Switch标签 包裹路由 和路由链接匹配上后 不在向后匹配
如果一个都没有匹配成功,就走 Redirect标签中的 路由链接

 {/* 注册路由 */}
              
           <Switch>
             <Route path='/about' component={About} />
             <Route path='/home' component={Home} />
             
              <Redirect to="/home" />
                  {/* 
                    Redirect: 
                            一般写在所有路由注册最下方,当所有路由都没有匹配成功时,
                            就跳转到 Redirect 指定的路由

                */}
           </Switch>

三、Src的精准匹配与模糊匹配

3.1 exact 是否开启精准匹配,默认是false
3.1.1. 精准匹配:
路由链接to 必须和 路由path 一模一样 才能匹配成功
如 to=“/home/b/a” 与 path=“/home” 不能匹配成功
3.1.2模糊匹配:
路由链接to 和 路由path 的第一个路径相同 就能匹配成功。
如 to=“/home/b/a” 与 path=“/home” 能匹配成功

 <Route exact={true} path='/about' component={About} />
 <Route exact={true} path='/home' component={Home} />

注意:不要随便开启精准匹配
个人博客:余生的学习笔记

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
React 设置路由守卫(Route Guards)可以用于在用户访问特定路由或执行特定操作之前进行权限验证或其他逻辑控制。虽然 React 本身没有内置的路由守卫功能,但可以使用第三方库来实现类似的功能,比如 React Router。 React Router 是一个常用的路由库,它提供了一种简单的方式来管理应用程序的路由。要使用路由守卫,你可以借助 React Router 提供的 `Route` 组件和 `render` 属性来进行配置。 以下是一个基本的例子: ```jsx import React from 'react'; import { BrowserRouter as Router, Route, Redirect } from 'react-router-dom'; // 定义一个私有路由组件 const PrivateRoute = ({ component: Component, ...rest }) => { // 在这里执行你的权限验证逻辑 const isAuthenticated = true; // 假设用户已经登录 return ( <Route {...rest} render={props => isAuthenticated ? ( <Component {...props} /> ) : ( <Redirect to="/login" /> ) } /> ); }; // 定义其他页面组件 const Home = () => <div>Home</div>; const Dashboard = () => <div>Dashboard</div>; const Login = () => <div>Login</div>; const App = () => ( <Router> <Route path="/" exact component={Home} /> <Route path="/login" component={Login} /> <PrivateRoute path="/dashboard" component={Dashboard} /> </Router> ); export default App; ``` 在上面的代码,我们定义了一个私有路由组件 `PrivateRoute`,它接受一个 `component` 属性和其他属性。在 `PrivateRoute` 组件,我们可以执行权限验证逻辑(比如检查用户是否已登录),然后根据验证结果决定是渲染目标组件还是重定向到登录页面。 注意,上述示例使用的是 React Router v5 版本的 API。如果你使用的是其他版本的 React Router,可能需要稍作调整。 希望以上内容对你有所帮助!如有任何疑问,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值