React 路由,路由跳转,路由传参,子路由(路由嵌套)详细案例

一.先了解一下前端路由

Ajax诞生以后,解决了每次用户操作都要向服务器端发起请求重新刷新整个页面的问题,但随之而来的问题是无法保存Ajax操作状态,浏览器的前进后退功能也不可用,当下流行的两种解决方法是:

        1.hash,hash原本的作用是为一个很长的文档添加锚点信息,它自带不改变url刷新页面的功能,所以自然而然被用在记录Ajax操作状态中了

        2.history,应该说history是主流的解决方案,浏览器的前进后退用的就是这个,它是window对象下的,以前的history提供的方法只能做页面之间的前进后退,如下:

history.go(number|URL)  //可加载历史列表中的某个具体的页面
history.forward()       //可加载历史列表中的下一个URL
history.back()          //可加载历史列表中的前一个URL

二.react路由

安装

npm i react-router-dom@5.0 -S  //安装固定版本

yarn add react-router-dom 


三.基本路由

导入路由需要的组件

import { BrowserRouter as Router,Route,Link } from "react-router-dom"

路由组件解析

Router  总路由

link       路由导航(可以理解为 a 链接)

- - - to   切换的链接

Route    路由

- - - path  对应链接

- - - component 对应组件

 简单路由完整代码(实现跳转)

import React, { Component } from 'react';
import {BrowserRouter as Router,Route,Link} from 'react-router-dom'
// 导入子组件
class App extends Component {
  render() {
    return (
      <div className="App" >    
        <Router>
            {/* 导航 */}
          <div>  
            <Link to="/">首页</Link> | <Link to="/about">关于</Link> 
          </div>
          <hr/>
            {/* 路由页面 */}
          <Route path="/" exact component={Home}></Route>
          <Route path="/about" component={About}></Route>
        </Router>  
      </div>
    );
  }
}
function Home(){
  return (<h1>我是首页</h1>);
}
function About(){
  return (<h1>我是关于</h1>);
}
export default App;

四.路由参数

1.定义指令 Link指令

<Link to="/produce/1">产品1</Link>|
<Link to="/produce/abc">产品abc</Link></div>

2.定义路由

<Route path="/produce/:id" component={Produce}></Route>

3.定义组件-获取路由参数(id传参)

function Produce({match}){
      return (<h1>我是产品:{match.params.id}</h1>);
  }

match是组件默认传递的参数,他有几个参数

1.params   路由的参数

2.isExact    是否精确匹配

3.path        路径

4.url           地址


五.子路由

这里我们使用Nalink 来代替 Link ,他比link选中的时候多一个active的class

导入Navlink

// NavLink 导航链接
// NavLink 比Link自动添加一个active的class
import {BrowserRouter as Router,Route,Link,NavLink} from 'react-router-dom'

1.定义指令NavLink指令

<NavLink to="/admin">管理页面</NavLink>|

2.定义主路由

<Route path="/admin" component={Admin}></Route>

3.编写主路由

function Admin() {
    return (<div style={{ "display": "flex" }}>
        <div style={{ width: '200px', "borderRight": "1px solid #f0f0f0" }}>
            <NavLink to="/admin/dash">概览</NavLink><br />
            <NavLink to="/admin/orderlist">订单</NavLink>
        </div>
        <div>
            <Route path='/admin/dash' component={Dash}></Route>
            <Route path='/admin/orderlist' component={orderlist}></Route>
        </div>
    </div>)
}

return内的内容都是呈现在Admin页面的内容,使用了jsx语法

4.编写子路由

function orderlist() {
    return (<div>
        订单列表
    </div>)
}
function Dash() {
    return (<div>
        概览
    </div>)
}

六.路由404配置 与Switch

Switch能让匹配的路由唯一

1.先导入Switch

 import {BrowserRouter as Router,Route,Link,Switch,NavLink} from 'react-router-dom'

2.定义路由

<Switch>
  <Route path="/" exact component={Home}></Route>
  <Route path="/about" component={About}></Route>
  <Route path="/produce/:id" component={Produce}></Route>
  <Route path="/detail" component={Detail}></Route>
  <Route path="*" component={NoMatch}></Route>
</Switch>

定义404路由要写到最后

3.编写404路由

 function NoMatch({location}){
   return (<h1>页面没有找到{location.pathname}</h1>);
 }

location 当前的地址

pathname 当前的地址信息


七.重定向

我们需要写一个默认的子路由,这个时候可用重定向(进入页面后默认显示的页面)

1.导入重定向 Redirect

 import {BrowserRouter as Router,Route,Link,Switch,NavLink,Redirect} from 'react-router-dom'

2.重新编写主路由

function Admin() {
    return (<div style={{ "display": "flex" }}>
        <div style={{ width: '200px', "borderRight": "1px solid #f0f0f0" }}>
            <NavLink to="/admin/dash">概览</NavLink><br />
            <NavLink to="/admin/orderlist">订单</NavLink>
        </div>
        <div>
            <Route path='/admin/dash' component={Dash}></Route>
            <Route path='/admin/orderlist' component={orderlist}></Route>
            {/* 重定向 */}
            <Redirect path="/admin" to="/admin/dash"></Redirect>
        </div>
    </div>)
}

八.组件的参数

function About({match,history,location}){
  console.log(match,history,location)
  return (<h1>我是about</h1>);
}

match 匹配的当前路由

isExact: true ,//是否精确匹配
params:{}// 当前路由的参数
path:{} //路由指定的path
url:{}// link 指定的链接地址

history当前路由信息

go() 历史记录跳转
goBack() 历史记录返回
goFoward() 前进
length  历史记录的长度
push()  跳转 有历史记录
replace() 跳转没有历史记录
location 地址信息
---hash #后面的参数
---pathname 当前路由的地址
---search 问号后面的参数
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现React路由6的页面跳转,首先需要安装`react-router-dom`库。你可以使用以下命令来安装路由:`npm i react-router-dom --save` 或者 `yarn add react-router-dom --save`。 接下来,你需要在App.js文件中创建一级路由,并导入路由表和CSS样式。可以参考以下代码示例: ```javascript import { NavLink, useRoutes } from 'react-router-dom'; import routes from './routers'; // 导入路由表 import './App.css'; // 导入CSS文件 function App() { const element = useRoutes(routes); return ( <div> <div className="nav"> <NavLink className='navLink' to="/about">About</NavLink> <NavLink className='navLink' to="/home">Home</NavLink> </div> <div className="main">{element}</div> </div> ); } export default App; ``` 在上面的代码中,我们使用`useRoutes`方法将路由表应用到组件中,并使用`NavLink`组件来创建导航链接。 接下来,你可以在Home.jsx文件中编写具体的页面内容。以下是一个示例: ```javascript import React from 'react'; import { NavLink, Outlet } from 'react-router-dom'; const Home = () => { return ( <div> <p style={{ 'textAlign': 'center' }}>Home页面</p> <div className="nav"> <NavLink className="navLink" to="message">Message</NavLink> <NavLink className="navLink" to="news">News</NavLink> <Outlet /> </div> </div> ); } export default Home; ``` 上述代码中,我们使用`NavLink`组件创建了两个导航链接,并通过`Outlet`组件来渲染页面。 这样,你就可以使用React路由6进行页面跳转了。根据你的路由配置,点击导航链接将会显示相应的页面。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [在react脚手架中react router v6 路由表、嵌套路由、编程式路由的使用,react点击按钮跳转页面并传参](https://blog.csdn.net/weixin_46360938/article/details/126747219)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值