# ReactRouter示例
# 基本使用
import React,{ Component } from 'react';
import ReactDOM from 'react-dom';
import {
HashRouter as Router, //BrowserRouter 与 HashRouter 使用其中一个
Route,
Link,
} from 'react-router-dom';
class App extends Component{...}
class Home extends Component{...}
class About extends Component{...}
class News extends Component{...}
React.render(
<Router>
<App>
<nav>
<Link to="/">Home</Link>
<Link to="/about">About</Link>
<Link to="/news">News</Link>
</nav>
<div>
<Route path="/" component={Home} />
<Route path="/about" component={About} />
<Route path="/news" component={News} />
</div>
</App>
</Router>
,document.querySelector('#app')
)
App组件中可以添加一些,所有页面共有的组件或内容。
路由容器组件
< Router >
...
<
/Router>
路由
<div>
# 当路径为 / 加载 Home组件
<Route path="/" component={Home} />
# 当路径为 /about 加载 About组件
<Route path="/about" component={About} />
# 当路径为 /news 加载 News组件
<Route path="/news" component={News} />
</div>
# 向路由组件传递参数
<div>
<ul>
{
messageArr.map((msgObj)=>{
return (
<li key={msgObj.id}>
{/* 向路由组件传递params参数 */}
{/* <Link to={`/home/message/detail/${msgObj.id}/${msgObj.title}`}>{msgObj.title}</Link> */}
{/* 向路由组件传递search参数 */}
{/* <Link to={`/home/message/detail/?id=${msgObj.id}&title=${msgObj.title}`}>{msgObj.title}</Link> */}
{/* 向路由组件传递state参数 */}
<Link to={{pathname:'/home/message/detail',state:{id:msgObj.id,title:msgObj.title}}}>{msgObj.title}</Link>
</li>
)
})
}
</ul>
<hr/>
{/* 声明接收params参数 */}
{/* <Route path="/home/message/detail/:id/:title" component={Detail}/> */}
{/* search参数无需声明接收,正常注册路由即可 */}
{/* <Route path="/home/message/detail" component={Detail}/> */}
{/* state参数无需声明接收,正常注册路由即可 */}
{/* <Route path="/home/message/detail" component={Detail}/> */}
</div>
/**detail 组件**/
export default class Detail extends Component {
render() {
// 接收params参数
// const {id,title} = this.props.match.params
// 接收search参数
// const {search} = this.props.location
// const {id,title} = qs.parse(search.slice(1))
// 接收state参数
const {id,title} = this.props.location.state || {}
const findResult = DetailData.find((detailObj)=>{
return detailObj.id === id
})
return (
<ul>
<li>ID:{id}</li>
<li>TITLE:{title}</li>
<li>CONTENT:{findResult.content}</li>
</ul>
)
}
}
# withRouter
WARNING
//withRouter可以加工一般组件,让一般组件具备路由组件所特有的API //withRouter的返回值是一个新组件
export default withRouter(Header)