React路由的安装与使用

本文介绍了React路由的安装过程,重点讲解了路由的使用,包括普通路由、参数传递、子路由的设置,以及如何实现路由守卫,通过给特定页面添加<Private>父组件来实现权限控制。此外,还提到了404页面的配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

安装

安装版本为5.0

npm i react-router-dom@5.0 -S

导入路由相关组件

import {
  HashRouter as Router,//HashRouter哈希路由 as起别名 router路由
  Route,//router 存放路由的容器
  NavLink,//navlink 导航链接
  Redirect,// Redirect 重定向
  Switch,// Switch一次匹配一个页面
} from "react-router-dom";

路由案例

1.普通路由

import {
  HashRouter as Router,
  Route,
  NavLink
} from "react-router-dom";
function App() {
  return (
    <Router>
      <div className="nav">
        <NavLink to="/" exact>首页</NavLink>|
        <NavLink to="/about">关于</NavLink>
      </div>
      <div className="views">
          <Route path="/" component={Home} exact></Route>
          <Route path="/about" component={About}></Route>
      </div>
    </Router>
  );
}
 
export default App;
 
function Home() {
  return (
    <div>
      <h1>首页</h1>
    </div>
  );
}
 
function About() {
  return (
    <div>
      <h1>关于页面</h1>
    </div>
  );
}

运行结果:

 2.路由传参

import { HashRouter as Router, Route, NavLink } from 'react-router-dom'
function App() {
    return (<Router>
        <NavLink to="/details/abc">参数abc</NavLink> |
        <NavLink to="/details/123">参数123</NavLink> |
        <Route path="/details/:id" component={Details}></Route>
    </Router>);
}
export default App;
function Details({ match, location }) {
    return (<div>
        <h1>路由传参</h1>
        <p>参数:{match.params.id}</p>
    </div>);
}

3.子路由

function Admin() {
  return (
    <div>
      <h1>Admin页面</h1>
      <p>
        <NavLink to="/admin/dash">概述</NavLink>
        <NavLink to="/admin/orderlist">订单列表</NavLink>
      </p>
      <Route path="/admin/dash" component={Dash}></Route>
      <Route path="/admin/orderlist" component={OrderList}></Route>
      <Redirect from="/admin" to="/admin/dash"></Redirect>
    </div>
  );
}

4.路由守卫

// 把props.chilren 解构诶children ...rest 剩余的其他参数
function Private({ children, ...rest }) {
  // 把Private组件的参数除了children全部转移到Route组件
  // Route不直接指定component通过render渲染出来
  return (
    <Route
      {...rest}
      render={({ location }) => {
        return localStorage.getItem("isLog") ? (
          children
        ) : (
          <Redirect
            to={{ pathname: "/login", state: { redirect: location.pathname } }}
          ></Redirect>
        );
      }}
    ></Route>
  );
}

 使用时,给要守卫的页面添加父组件<Priviate> 

<Priviate path="/admin">
    <Admin></Admin>
</Priviate>

404页面

<Switch>
    <Route path="/" component={Home} exact></Route>
    <Route path="/about" component={About}></Route>
    {/*匹配任意路径*/}
    <Route path="*" component={NoMatch}></Route>
</Switch>
//404页面
function NoMatch({ location }) {
    return (<div>
        <h3>404</h3>
        <p>当前地址找不到:{location.pathname}</p>
        <NavLink to="/">首页</NavLink>
    </div>)
}

效果如下:

 欲知后事如何,请听下回分解. . . . . .

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一只小小的蜗牛_

万水千山总是情,给个五块行不行

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值