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.statereturn (<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.paramsconst 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.statereturn (<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.locationlet {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.statelet {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.stateconsole.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.locationreturn (<div><ul><li>ID:{id}</li><li>Title:{title}</li></ul></div>)}}
