react-router使用示例

1:首先在项目中引入模块

npm install --save react-router react-router-dom

2:然后新建一个文件,专门用来设置整个项目所用的路由,我这里叫router.js,在这个文件里引入想要配置路由的组件,给组件设置名称

import './index.css'
import React,{Component} from 'react';
import Nava from './nav/testa';
import Navb from './nav/testb';
import Navc from './nav/testc';
import Error from './nav/error';
import {Route,Switch,Redirect} from 'react-router-dom';

class Allrouter extends Component{
    render(){
        return <Switch>
            <Route exact path="/" component={Nava} />
            <Route  path="/Navb/:name" component={Navb} />
            <Route  path="/Navc" component={Navc} />
            <Redirect from="/redirect" to="/Navb" />       
            <Route component={Error} />
        </Switch>
    }
}
export default Allrouter;

3:给组件设置好路由名称以后开始使用路由,这里声明了一个导航组件Nav,用以验证各种方式的路由跳转,

 

import React,{Component} from 'react';
import {Link} from 'react-router-dom';
import { withRouter } from 'react-router-dom';
//link标签用来跳转,其中to是要跳转的路由,路由时在路由文件(这里时allRouter)中定义的
class Nav extends Component{
    constructor (props){
        super(props);
        this.handleClick=this.handleClick.bind(this);
        this.goToc=this.goToc.bind(this);
        this.state={
            name:'xuelanDing',
            age:18
        }
    }
    handleClick(){
        console.log(this.props)
        this.props.history.push(`/Navb/${this.state.name}`)
    }
    goToc(){
        this.props.history.push({pathname:'/Navc',query:{name:'xuelanDing',age:19}})
    }
    render(){
        let name = this.state.name;
        return <div className="navList">
            <Link   to='./'>点击我去A页面</Link>
            <Link to={'/Navb/' + name}>点击我去B页面(设置了参数)</Link>
            <Link to='/Navc'>点击我去C页面</Link>
            <Link to='/test'>测试404</Link>
            <Link  to='/redirect'>测试跳转</Link>
            <button onClick={this.handleClick}>通过js方法跳转到B页面</button>
            <Link to={{pathname:'/Navc',state:{name:'xuelanDing',price:20}}}>去c页面(通过state传参)</Link>
            <button onClick={this.goToc} style={{paddingLeft:'20px'}}>点击我去C页面,并且通过query传参</button>
        </div>
    }
}
export default withRouter(Nav);

 4:挂载Nav组件,index.js如下

import React from 'react';
import ReactDOM from 'react-dom';
import {BrowserRouter as Router} from 'react-router-dom';
import Routercomponent from './router';
import Nav from './nav/Nav'
ReactDOM.render(<Router><Nav /><Routercomponent /></Router>,document.getElementById('root'))

总结:

1:传参如果是在path后面设置路径,可以通过link和this.props.history.push来跳转,且必须传参,且会在地址栏显示

接收此种方式参数的方式是 this.props.match.params.XX

 

2:跳转到一个页面可以通过query携带参数,不在地址栏显示,但刷新参数消失

接收此种传参方式的参数的方式是 this.props.location.query

 

3:通过link的state传参,不在地址栏显示,且刷新不消失

接收此种传参方式的参数 this.props.location.state

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值