33_向路由组件传递数据
一级路由:
home.jsx
SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。import React, {Component} from 'react'
import {Switch, Route, Redirect} from 'react-router-dom'
import MyNavLink from '../components/my-nav-link'
import News from './news'
import Message from './message'
export default class Home extends Component {
render() {
return (
<div>
<h2>home route component</h2>
<div>
<ul className='nav nav-tabs'>
<li>
<MyNavLink to='/home/news'>News</MyNavLink>
</li>
<li>
<MyNavLink to='/home/message'>Message</MyNavLink>
</li>
</ul>
<div>
<Switch>
<Route path='/home/news' component={News}/>
<Route path='/home/message' component={Message}/>
<Redirect to='/home/message'/>
</Switch>
</div>
</div>
</div>
)
}
}
二级路由:
message.jsx
import React, {Component} from 'react'
import {Route} from 'react-router-dom'
import MessageDetail from './message-detail';
export default class Message extends Component {
state = {
messages: []
}
componentDidMount() {
//模拟发送ajax请求,异步获取数据
setTimeout(() => {
const messages = [
{id: 1, title: 'message001'},
{id: 3, title: 'message003'},
{id: 5, title: 'message005'},
{id: 6, title: 'message006'},
]
// 更新状态
this.setState({messages})
}, 1000)
}
render() {
return (
<div>
<ul>
{
this.state.messages.map((m, index) => (
<li key={index}>
<a href={`/home/message/messagedetail/${m.id}`}>{m.title}</a>
</li>
))
}
</ul>
{/*:id代表必须传一个参数,既是占位符,也是标识名称*/}
<Route path='/home/message/messagedetail/:id' component={MessageDetail}/>
</div>
)
}
}
二级路由:
news.jsx
import React, {Component} from 'react'
export default class News extends Component {
state = {
newsArr: [
'news111',
'news222',
'news333',
'news444',
]
}
render() {
return (
<ul>
{
this.state.newsArr.map((c, index) => <li key={index}>{c}</li>)
}
</ul>
)
}
}
细节组件:
import React from 'react' const allMessage = [ {id: 1, title: 'message001', content: '我爱你,中国'}, {id: 3, title: 'message003', content: '我爱你,老婆'}, {id: 5, title: 'message005', content: '我爱你,孩子'}, {id: 6, title: 'message006', content: '我爱你,父母'}, ] export default function MessageDetail(props) { console.log(props) // 得到请求中参数的id const {id} = props.match.params //查询得到对应的message const message = allMessage.find(//返回第一个结果为true的数组元素 //哪一个m对应上了m.id===id 则结果为true,就是find的结果 (m) => m.id === id * 1 ); return ( <ul> <li>ID:{message.id}</li> <li>TITLE:{message.title}</li> <li>CONTENT:{message.content}</li> </ul> ) }
更多精彩

