react中使用路由起手式,一些思路和细节。

一.安装并配置

我们选择使用react-router实现路由效果

bash 复制代码
yarn add react-router-dom

下载后需要对Route进行引入,是个内置的组件。该组件是有两个属性一个是path,一个是component,path是组件对应的路由,component是对应的组件

二.路由的基本使用

  1. <App>的最外侧包裹了一个<BrowserRouter><HashRouter>
bash 复制代码
//整个应用需要使用一个路由器去包裹
import {BrowserRouter} from 'react-router-dom'
<BrowserRouter>
    <App />
</BrowserRouter>
  1. 导航的a标签改为Link标签
    <Link to="/xxx">Demo<.Link>

  2. 导航区写Route标签进行路径的匹配
    <Route path='/xxx' compoent={引入的组件名称}

bash 复制代码
import React, { Component } from 'react'
import { Link, Route,Switch } from 'react-router-dom'
import Home from "./home"
import About from "./about"
export default class MenuLeft extends Component {
    render() {
        return (
            <div>
                <Link to='/home'>Home</Link>
                <Link to='/about'>about</Link>
                {/* 注册路由 */}
                    <Route path='/home' component={Home}></Route>
                    <Route path='/about' component={About}></Route>
                    {/* !!!注意这种写法将不生效<Route path='/about' component={About}> </Route>,因为标签之间有空格 */}
            </div>
        )
    }
}

三、路由组件和一般组件

区分方式:使用方式

  • 一般组件使用方式<Home/>,默认props为空对象
  • 路由组件使用方式<Route path='/home' component={Home}></Route>,接收到三个固定的属性
    history:
      go: f go(n)
      goBack: f goBack()
      goForward: f goForward( )
      push: f push(path, state)
      replace: f replace(path, state)
    location:
      pathname: "/about
      search:" "
      state: undefined
    match:
      params: ()]
      path: "/about'
      url: "/about'

四、向路由组件传递参数

1. params参数

  路由链接(携带参数):<Link to='/demo/test/tom/18'}>详情</Link>

  注册路由(声明接收):<Route path="/demo/test/:name/:age"component=(Test)/>

  按收参数: const {id,title} = this.props,match.params
2. search参数

  路由链接(携带参数):<Link to='/demo/test?name=tom&age=18')>详情</Link>

  注册路由(无需声明,正常注册即可):<Route path="/demo/test"component=(Test)/>

  按收参数: const {search} = this,props,location

  备注:获取到的search是urlencoded编码字符求,需要借助querystring解析
3. stats参数

  路由链接(携带参数):<Link to=({path:'/demo/test',state:(name:'tom',age:18)))>详情</Link>

  注册路由(无需声明,正常注册即可):<Route path="/demo/test"component=(Test)/>

  接收参数: this.props,location,state备注:刷新也可以保留住参数

五、repalce和push

路由跳转默认为push模式,如需开启replace模式

bash 复制代码
<Link to='/about' repalce>about</Link>

六、编程式路由导航

》路由组件

核心:借助his.prosp.hstory对象上的API对操作路由跳转、前进、后退。一些参数规则请向上移步路由组件和一般组件部分查看。

  • this.prosp.history.push()
  • this.prosp.history.replace()
  • this.prosp.history.goBack()
  • this.prosp.history.goForward()
  • this.prosp.history.go()
bash 复制代码
repalceShow = (id,title) =>{
//params
this.props.history.push(`/home/message/detail/${id}/${title}`)
//searh
this.props.history.push(`/home/message/detail/?id={id}&title={title}`)
//state
this.props.history.push('/home/message/detail',{id,title})
}

》一般组件

bash 复制代码
//更改组件暴露方式,通过withRouter加工一般组件,让一般组件具备路由组件所特有的API
import { withRouter } from 'react-router-dom'
class MenuLeft extends Component {
    render() {
        .....
    }
}
export default withRouter(MenuLeft )

end ,一些学习资源

相关推荐
天启HTTP6 分钟前
开启全局代理后网络变慢,问题出在哪
开发语言·前端·网络·tcp/ip·php
卡布鲁11 分钟前
Webpack 核心原理与自定义 Loader/Plugin 实战
前端·javascript
智码看视界18 分钟前
Web Storage 的无障碍实践与工程化应用
前端·javascript·web
孟陬20 分钟前
国外技术周刊 #140:在 Jeff Bezos 的私密 Campfire 峰会上,我学到了关于亿万富翁的事
前端·后端
槑有老呆21 分钟前
Bun:一个让 Node 开发者原地起飞的 JS/TS 运行时
前端
小小小小宇22 分钟前
AI Agent 核心流程与底层逻辑
前端
wuhen_n24 分钟前
RAG 实战:语义检索 + 大模型生成精准问答
前端·langchain·ai编程
沉尘58829 分钟前
ACE-GCM加解密微信小程序
前端
春风得意之时1 小时前
前端安装项目出现代理问题和ssl认证问题
前端·网络协议·ssl