安装react-router
npm install --save react-router-dom
index.js
//引入react核心库
import React from 'react'
//引入ReactDOM
import ReactDOM from 'react-dom'
//
import {BrowserRouter} from 'react-router-dom'
//引入App
import App from './App'
ReactDOM.render(
<BrowserRouter>
<App/>
</BrowserRouter>,
document.getElementById('root')
)
传递params参数并实现跳转
传递参数
import React, {Component} from 'react';
import {Link, Route} from "react-router-dom";
import Params from "../params";
import SearchRoute from "../search";
import StateRoute from "../state";
export default class Demo extends Component{
state={
messageArr:[
{id:'001',title:'消息1',content:'锄禾日当午'},
{id:'002',title:'消息2',content:'汗滴禾下土'},
{id:'003',title:'消息3',content:'谁知盘中餐'},
{id:'004',title:'消息4',content:'粒粒皆辛苦'}
]
}
render() {
const {messageArr}=this.state
return (
<div>
<h2>params参数</h2>
<ul>
{
messageArr.map((item,index)=>{
return (
<li key={item.id}>
<Link to={`/params/${item.id}/${item.title}/${item.content}`}>params跳转并携带参数</Link>
</li>
)
})
}
</ul>
<hr />
{/* 声明接收params参数 */}
<Route path="/params/:id/:title/:content" component={Params}/>
</div>
);
}
}
接收参数
import React, {Component} from 'react';
export default class Params extends Component{
render() {
// 接收params参数
const {id,title}=this.props.match.params
return (
<div>
params路由数据展示
<h3>params:id:{id}---name:{title}</h3>
</div>
);
}
}
传递search参数并实现跳转
传递参数
import React, {Component} from 'react';
import {Link, Route} from "react-router-dom";
import Params from "../params";
import SearchRoute from "../search";
import StateRoute from "../state";
export default class Demo extends Component{
state={
messageArr:[
{id:'001',title:'消息1',content:'锄禾日当午'},
{id:'002',title:'消息2',content:'汗滴禾下土'},
{id:'003',title:'消息3',content:'谁知盘中餐'},
{id:'004',title:'消息4',content:'粒粒皆辛苦'}
]
}
render() {
const {messageArr}=this.state
return (
<div>
<h2>search参数</h2>
<ul>
{
messageArr.map((item,index)=>{
return (
<li key={item.id}>
<Link to={`/search?id=${item.id}&title=${item.title}&content=${item.content}`}>search跳转并携带参数</Link>
</li>
)
})
}
</ul>
<hr />
{/* search参数无需声明接收,正常注册路由即可 */}
<Route path="/search" component={SearchRoute}/>
</div>
);
}
}
接收参数
import React, {Component} from 'react';
import qs from 'querystring'
export default class SearchRoute extends Component{
render() {
// 接收search参数
const {search} = this.props.location
const {id,title} = qs.parse(search.slice(1))
return (
<div>
search路由数据展示
<br/>
<h3>search路由携带数据:id:{id}---name:{title}</h3>
</div>
);
}
}
传递state参数并实现跳转
传递参数
import React, {Component} from 'react';
import {Link, Route} from "react-router-dom";
import Params from "../params";
import SearchRoute from "../search";
import StateRoute from "../state";
export default class Demo extends Component{
state={
messageArr:[
{id:'001',title:'消息1',content:'锄禾日当午'},
{id:'002',title:'消息2',content:'汗滴禾下土'},
{id:'003',title:'消息3',content:'谁知盘中餐'},
{id:'004',title:'消息4',content:'粒粒皆辛苦'}
]
}
render() {
const {messageArr}=this.state
return (
<div>
<h2>state参数</h2>
<ul>
{
messageArr.map((item,index)=>{
return (
<li key={item.id}>
<Link to={{pathname:'/state',state:{id:item.id,title:item.title,content:item.content}}}>search跳转并携带参数</Link>
</li>
)
})
}
</ul>
<hr />
{/* state参数无需声明接收,正常注册路由即可 */}
<Route path="/state" component={StateRoute}/>
</div>
);
}
}
接收参数
import React, {Component} from 'react';
export default class StateRoute extends Component{
render() {
// 接收state参数
const {id,title} = this.props.location.state || {}
return (
<div>
state路由数据展示
<br/>
<h3>state路由携带数据:id:{id}---name:{title}</h3>
</div>
);
}
}
编程式导航
传递params参数并实现跳转
传递参数
import React, {Component} from 'react';
import {Link, Route, Switch, withRouter} from "react-router-dom";
import Params from "../params";
import SearchRoute from "../search";
import StateRoute from "../state";
class Demo extends Component{
state={
messageArr:[
{id:'001',title:'消息1',content:'锄禾日当午'},
{id:'002',title:'消息2',content:'汗滴禾下土'},
{id:'003',title:'消息3',content:'谁知盘中餐'},
{id:'004',title:'消息4',content:'粒粒皆辛苦'}
]
}
toParams=(item)=>{
//replace跳转+携带params参数
this.props.history.replace(`/params/${item.id}/${item.title}/${item.content}`)
//push跳转+携带params参数
// this.props.history.push(`/params/${item.id}/${item.title}/${item.content}`)
}
render() {
const {messageArr}=this.state
return (
<div>
<h2>params参数</h2>
<ul>
{
messageArr.map((item,index)=>{
return (
<li key={item.id}>
<button onClick={()=>this.toParams(item)}>params跳转并携带参数</button>
</li>
)
})
}
</ul>
<hr />
{/*声明接收params参数 */}
<Route path="/params/:id/:title/:content" component={Params}/>
</div>
);
}
}
export default withRouter(Demo)
传递search参数并实现跳转
传递参数
import React, {Component} from 'react';
import {Link, Route, Switch, withRouter} from "react-router-dom";
import Params from "../params";
import SearchRoute from "../search";
import StateRoute from "../state";
class Demo extends Component{
state={
messageArr:[
{id:'001',title:'消息1',content:'锄禾日当午'},
{id:'002',title:'消息2',content:'汗滴禾下土'},
{id:'003',title:'消息3',content:'谁知盘中餐'},
{id:'004',title:'消息4',content:'粒粒皆辛苦'}
]
}
toSearch=(item)=>{
//replace跳转+携带search参数
// this.props.history.replace(`/search?id=${item.id}&title=${item.title}&content=${item.content}`)
//push跳转+携带search参数
this.props.history.push(`/search?id=${item.id}&title=${item.title}&content=${item.content}`)
}
render() {
const {messageArr}=this.state
return (
<div>
<h2>search参数</h2>
<ul>
{
messageArr.map((item,index)=>{
return (
<li key={item.id}>
<button onClick={()=>this.toSearch(item)}>search跳转并携带参数</button>
</li>
)
})
}
</ul>
<hr />
{/* search参数无需声明接收,正常注册路由即可 */}
<Route path="/search" component={SearchRoute}/>
</div>
);
}
}
export default withRouter(Demo)
传递state参数并实现跳转
传递参数
import React, {Component} from 'react';
import {Link, Route, Switch, withRouter} from "react-router-dom";
import Params from "../params";
import SearchRoute from "../search";
import StateRoute from "../state";
class Demo extends Component{
state={
messageArr:[
{id:'001',title:'消息1',content:'锄禾日当午'},
{id:'002',title:'消息2',content:'汗滴禾下土'},
{id:'003',title:'消息3',content:'谁知盘中餐'},
{id:'004',title:'消息4',content:'粒粒皆辛苦'}
]
}
toState=(item)=>{
//replace跳转+携带state参数
// this.props.history.replace('/state',{
// id:item.id,
// title:item.title,
// content:item.content,
// })
//push跳转+携带state参数
this.props.history.push('/state',{
id:item.id,
title:item.title,
content:item.content,
})
}
render() {
const {messageArr}=this.state
return (
<div>
<h2>state参数</h2>
<ul>
{
messageArr.map((item,index)=>{
return (
<li key={item.id}>
<button onClick={()=>this.toState(item)}>search跳转并携带参数</button>
</li>
)
})
}
</ul>
<hr />
{/* state参数无需声明接收,正常注册路由即可 */}
<Route path="/state" component={StateRoute}/>
</div>
);
}
}
export default withRouter(Demo)