react更改路由入参_react-router-dom v4版路由及传参

本文介绍了React Router v4的安装、主要组件的使用,包括BrowserRouter、Route、Link等,并展示了如何进行路由重定向、参数传递、事件中切换路由以及高版本的嵌套路由配置。同时,详细讲解了在组件中如何接收和更新路由参数,以及使用componentWillReceiveProps和componentDidMount生命周期方法处理数据请求。
摘要由CSDN通过智能技术生成

react-router-dom v4版路由及传参

日期:2018-09-14

来源:程序思维浏览:2073次

现在最新版本的react路由是react-router-dom,那么他如何使用呢?下面由我来给大家分享一下:

1e4cc8866dc413028d2dbca1764adc4d.png

1、安装依赖  不需要指定版本,默认最新

npm i react-router react-router-dom --save-dev

2、引入主要组件对象

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

3、书写结构在组件内部,不需要写在render中,Router组件有且只有一个根节点,除了路由组件,可以写入其他标签

默认 Route所在的位置为路由组件显示的容器(tips:Link写在Router内部形成路由结构)

首页

关于

4、路由重定向 通过 Redirect组件对象,设置to属性

5、路由参数传递

/a/1 ---this.props.match.params.id

/a?id=1---this.props.location.query.id

6、事件中进行路由切换跳转

this.props.history.push('/home')

因为BrowserRouter  相当于 故可直接通过history进行push跳转

高版嵌套路由写法:

{

this.state.arr.map(function(item,i){

return(

{item.pname}

)

})

}


然后在所导入的组件引入import Detail from "./detail"

7、钩子函数:

componentWillReceiveProps(a)可时时更新传入的新数据,相当于vue的watch( )监听

componentDidMount( ) 接收id并请求数据,但页面数据只能刷新一次

import React from 'react';

import $ from 'jquery'

class Detail extends React.Component{

constructor(props){

super(props)

this.state={

detail:''

}

}

render(){

return(

详情

{this.state.detail}

)

}

//可时时更新传入的新数据,相当于vue的watch()监听

componentWillReceiveProps(a){

var _this=this;

$.ajax({

type:"get",

url:"http://jx.xuzhixiang.top/ap/api/detail.php",

data:{id:a.location.query.id},

dataType:'json',

async:true,

success:function(data){

_this.setState({detail:data.data.pdesc})

}

});

}

//接收id并请求数据,但页面数据只能刷新一次

componentDidMount(){

var _this=this;

$.ajax({

type:"get",

url:"http://jx.xuzhixiang.top/ap/api/detail.php",

data:{id:_this.props.location.query.id},

dataType:'json',

async:true,

success:function(data){

_this.setState({detail:data.data.pdesc})

}

});

}

}

export default Detail;

完整代码

app.js   高版本路由配置

import React, { Component } from 'react';

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

import Home from './components/home'

import About from './components/about'

import Other from './components/other'

class App extends Component {

render() {

return (

高版路由

   {/* 有一个根节点 */}

首页

关于

其他

     {/* 解决控制台一片红色问题 */}

   {/* 路由重定向 */}

);

}

}

export default App;

home.js

import React from 'react';

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

import $ from 'jquery'

import Detail from './detail'

class Home extends React.Component{

constructor(props){

super(props)

this.state={

arr:[]

}

}

tap(){

this.props.history.push('/other')

}

render(){

return(

shouye

跳转other

{

this.state.arr.map(function(item,i){

return(

{item.pname}

)

})

}


)

}

componentWillMount(){

var _this=this;

$.ajax({

type:"get",

url:"http://jx.xuzhixiang.top/ap/api/productlist.php",

dataType:'json',

async:true,

success:function(data){

_this.setState({arr:data.data})

}

});

}

}

export default Home;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值