1.params传参
//路由链接,这里传入参数
<Link to={`/home/news/detail/${item.id}/${item.name}`}>{item.title}</Link>
//路由匹配参数,注册路由
<Route path="/home/news/detail/:id/:name" component={Detail}></Route>
//在子路由组件中中获取参数
const {id,name}=this.props.match.params
路由匹配的地方与传入的参数需要保持一致
父组件路由new.jsx
import React, { Component } from 'react'
import "./index.css"
import {Link,Route,Redirect} from 'react-router-dom'
import Detail from './Deatil'
export default class index extends Component {
state={
obj:[{
id:"01",
title:"我是新闻组件1",
name:"今天心情不错"
},
{
id:"02",
title:"我是新闻组件2",
name:"今天天气不错"
},
{
id:"03",
title:"我是新闻组件3",
name:"今天需要工作"
},
{
id:"04",
title:"我是新闻组件4",
name:"今天出入玩"
},
{
id:"05",
title:"我是新闻组件5",
name:"我也不知道干什么"
},
{
id:"06",
title:"我是新闻组件6",
name:"我知道我的目标"
},
]
}
render() {
const {obj}= this.state
return (
<div>
<ul className="newsList">
{
obj.map(item=>{
return <li key={item.id}>
<Link to={`/home/news/detail/${item.id}/${item.name}`}>{item.title}</Link>
</li>
})
}
</ul>
<div className="dispaly">
<Route path="/home/news/detail/:id/:name" component={Detail}></Route>
<Redirect to="/home/news/detail/01/今天心情不错"></Redirect>
</div>
<hr/>
</div>
)
}
}
子组件路由detail.jsx
import React, { Component } from 'react'
const list=[{
id:"01",
content:"命里有时终须有,命里无时莫强求。谋事在人,成事在天。很多事情是人力不能勉强的,随缘就好"
},
{
id:"02",
content:"刻意为之的事情有时候反而容易失败,有时候一切顺其自然,不用人力强行干涉,反而是最好的办法。"
},
{
id:"03",
content:"人心本善,但是总有各种各样的诱惑让人偏离善的本心,因此要师长朋友加以劝勉。就像山中的钟,随时敲打才能发出响声。"
},
{
id:"04",
content:"月圆缺,水满溢,事情到了极致一定会遭受祸患,只有懂得知足,才是富足。"
},
{
id:"05",
content:" 口舌无刃,却丝毫不逊于利剑。不要随便指摘,能与人方便处,多些鼓励就好。"
},
{
id:"06",
content:"磨刀时怕不锋利,但是太锋利了又容易伤人手指;追求财富时怕财富不多,财富太多之后又被财所累。"
},
]
export default class index extends Component {
render() {
const {id,name}=this.props.match.params
const obj=list.find(item=>item.id===id)
return (
<div>
<ul>
<li>Id:{id}</li>
<li>Name:{name}</li>
<li>Content:{obj.content}</li>
</ul>
</div>
)
}
}
2.search传参
//注册路由,将需要传递的参数用query传参的方式
<Link to={`/home/message/sal?id=${item.id}&title=${item.title}`}>{item.title}</Link>
//路由组件中的路径正常传入
<Route path="/home/message/sal" component={Sal}></Route>
//在需要使用参数的组件中引入React自带的querystring包
import qs from 'querystring'
//解析search参数
let {id,title}=qs.parse(search.slice(1))
//使用参数
父组件路由message.jsx
import React, { Component } from 'react'
import {Link,Route,Redirect} from 'react-router-dom'
import Sal from './Sal'
import "./index.css"
export default class index extends Component {
state={
data:[
{
id:"01",
title:"我是消息1"
},
{
id:"02",
title:"我是消息2"
},
{
id:"03",
title:"我是消息3"
},
{
id:"04",
title:"我是消息4"
},
{
id:"05",
title:"我是消息5"
},
{
id:"06",
title:"我是消息6"
}
]
}
render() {
const {data}=this.state
return (
<div>
<ul className="messageList">
{
data.map(item=>{
return <li key={item.id}>
<Link to={`/home/message/sal?id=${item.id}&title=${item.title}`}>{item.title}</Link>
</li>
})
}
</ul>
<div className="displayArea">
<Route path="/home/message/sal" component={Sal}></Route>
<Redirect to="/home/message/sal?id=01&title=我是消息1"></Redirect>
</div>
</div>
)
}
}
子组件sal.jsx
import React, { Component } from 'react'
import qs from 'querystring'
export default class index extends Component {
state={list:[{
id:"01",
content:"命里有时终须有,命里无时莫强求。谋事在人,成事在天。很多事情是人力不能勉强的,随缘就好"
},
{
id:"02",
content:"刻意为之的事情有时候反而容易失败,有时候一切顺其自然,不用人力强行干涉,反而是最好的办法。"
},
{
id:"03",
content:"人心本善,但是总有各种各样的诱惑让人偏离善的本心,因此要师长朋友加以劝勉。就像山中的钟,随时敲打才能发出响声。"
},
{
id:"04",
content:"月圆缺,水满溢,事情到了极致一定会遭受祸患,只有懂得知足,才是富足。"
},
{
id:"05",
content:" 口舌无刃,却丝毫不逊于利剑。不要随便指摘,能与人方便处,多些鼓励就好。"
},
{
id:"06",
content:"磨刀时怕不锋利,但是太锋利了又容易伤人手指;追求财富时怕财富不多,财富太多之后又被财所累。"
}
]}
render() {
let {search}=this.props.location
let {id,title}=qs.parse(search.slice(1))
let {content}=this.state.list.find(item=>item.id==id)
console.log(content)
return (
<div>
<ul>
<li>ID:{id}</li>
<li>Title:{title}</li>
<li>content:{content}</li>
</ul>
</div>
)
}
}
3.state传参
不会将参数放在地址栏中,跟上面不同。无需初始渲染,就可以默认将第一项作为打开页面的第一项。
//路由注册,使用路由
//动态传进去一个对象,第一项是路径,第二项是一个对象state
<Link to={{pathname:'/about/col',state:{id:item.id,title:item.title}}}>{item.title}</Link>
//路由组件路径不变
<Route path='/about/col' component={Col}></Route>
//获得参数,在this.props.location.state
let {state:{id,title}}=this.props.location
About.jsx
import React, { Component } from 'react'
import {Link,Route} from 'react-router-dom'
import Col from './Col'
export default class index extends Component {
state={
result:[
{
id:"01",
title:"我是关于1"
},
{
id:"02",
title:"我是关于2"
},
{
id:"03",
title:"我是关于3"
},
{
id:"04",
title:"我是关于4"
}
]
}
render() {
const {result}=this.state
console.log(result)
return (
<div>
<h1>about组件</h1>
<hr/>
<ul>
{
result.map(item=>{
return(
<li key={item.id}>
<Link to={{pathname:'/about/col',state:{id:item.id,title:item.title}}}>{item.title}</Link>
</li>
)
})
}
</ul>
<Route path='/about/col' component={Col}></Route>
</div>
)
}
}
子路由中Col.jsx
import React, { Component } from 'react'
export default class index extends Component {
render() {
let {state:{id,title}}=this.props.location
return (
<div>
<ul>
<li>ID:{id}</li>
<li>Title:{title}</li>
</ul>
</div>
)
}
}