React-Router学习笔记

1 篇文章 0 订阅
1 篇文章 0 订阅

安装React Router

npm install react-router-dom --save

Router的使用

```App.js```
import React from "react"
import {BrowserRouter as Router,Route} from "react-router-dom"

export default class App extends React.Component{
    render(){
        return(
            <div id="App">
                <Router>
                    <Route path="/" component={ 组件名 }>
                </Router>
            </div>
        )
    }
}

React Router匹配规则

使用exact进行单独匹配
    <Router path="/main" component={Main}>
    <Router path="/main/ucenter" component={UCenter}>
    在访问/main/ucenter时,会展示Main和UCenter两个组件的内容
    在main路由中添加 exact
    <Router exact path="/main" component={Main}>
    只有当路由等于/main时,才会展示Main路由的内容


使用strict进行精准匹配
<Router  strict exact path="/main" component={Main}>
只有当路由完全匹配时才会展示内容

使用Switch匹配404页面
<Switch>
    <Router path="/main" component={Main}>
    <Router path="/main/ucenter" component={UCenter}>
    <Router component={NotFound}>
</Switch>

当输入不存在的路由时会匹配到404页面

导航栏跳转
Nav.jsx
使用NavLink组件替换导航栏Link组件

<div>
    {/*默认选中样式ClassName为active*/}
    <NavLink to="/"}>首页</NavLink>
    {/*修改选中ClassName为selected*/}
    <NavLink activeClassName="selected" to="/download">下载</NavLink>
    {/*直接设置选中样式*/}
    <NavLink activeStyle={{color:"red"}} to="/about">关于</NavLink>
</div>

在跳转时可以添加属性

<Link to={{
    pathname:"/main",
    search:"?sort=name",
    hash:"the-hash",
    state:{flag:"flag"} /*隐性传递参数 取值:props.localtion.state.flag*/
    }}

路由传参

<Route to="/download/:id" />
此时如果不传递参数,则会出现404页面
<Route to="/download/:id?" />
在参数后加?解决该问题
取参:
    this.props.match.params.id
    

读取keyValue形式参数
链接:http://127.0.0.0/download?id=222&name=file

读取id和name
第一种方式
    const params = new URLSearchParams(props.localtion.search)
    let id = params.get("id"),name = params.get("name")
第二中方式
    import querystring from "querystring"
    const value = querystring.parse(props.localtion.search).replace("?","")
    let id = value.id,name = value.name

页面重定向

当访问/index路由时会被重定向到/home
<Router from="/index" to="/home" >

在页面不满足条件时跳转,比如用户为登陆跳转到登陆页面

import React from "react"
import {Redirect} from "react-router-dom"

export default class Shop extends React.Component{
    state = {
        isLogin:false
    }
    const {isLogin} = this.state
    render(){
        return(
          isLogin ?
          <div>Shop页面</div>
          :
          <Redirect to="/login" />  
        )
    }
}

页面重定向 push和replace

import React from "react"


export default class Shop extends React.Component{
    
    
    backToHome = ()=>{
       /*第一种方式*/
       this.props.history.push("/")
       /*第二种方式*/
       this.props.replace("/")
       /*两种方式的区别在于push叠加的上一次页面依然存在,replace是替换,
       *上一次的页面不存在了*/ 
    }
    
    
    render(){
        return(
            <div>
                <button onClick={this.backToHome}>回到首页</button>
            </div>
        )
    }
}

询问是否确定离开

import React from "react"
import {Prompt} from "react-router-dom"


export default class Shop extends React.Component{
    constructor(props) {
        super(props);
        this.state = {
            name:"",
        }
    }
    
    render(){
        return (
            <div>
                <Prompt when={this.state.name} message={"真的要离开该页面吗?"}/>
                <input type="text" value={this.state.name} onChange={(e) => {this.setState({name:e.target.value})}}/>
            </div>
        )
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

咏春-迪迦

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值