npm install -g create-react-app
安装脚手架-g
代表的是系统全局安装的意思npm start
预览项目npm install --save react-router-dom
index.js
import React from 'react';
import ReactDOM from 'react-dom'
import AppRouter from './AppRouter'
ReactDOM.render(<AppRouter/>,document.getElementById('root'))
AppRouter.js
import React from "react";
import { BrowserRouter as Router, Route, Link } from "react-router-dom";
function Index() {
return <h2>JSPang.com</h2>;
}
function List() {
return <h2>List-Page</h2>;
}
function AppRouter() {
return (
<Router>
<ul>
<li> <Link to="/">首页</Link> </li>
<li><Link to="/list/">列表</Link> </li>
</ul>
<Route path="/" exact component={Index} />
<Route path="/list/" component={List} />
</Router>
);
}
export default AppRouter;
import React, { Component } from 'react';
class Index extends Component {
constructor(props) {
super(props);
this.state = { }
}
render() {
return ( <h2>JSPang.com</h2> );
}
}
export default Index;
import React, { Component } from 'react';
class List extends Component {
constructor(props) {
super(props);
this.state = { }
}
render() {
return ( <h2>List Page</h2> );
}
}
export default List;
import React from "react";
import { BrowserRouter as Router, Route, Link } from "react-router-dom";
import Index from './Pages/Index'
import List from './Pages/List'
function AppRouter() {
return (
<Router>
<ul>
<li> <Link to="/">首页</Link> </li>
<li><Link to="/list/">列表</Link> </li>
</ul>
<Route path="/" exact component={Index} />
<Route path="/list/" component={List} />
</Router>
);
}
export default AppRouter;
exact
精准匹配的意思比如把Index
的精准匹配去掉,会发现,无论在地址栏输入什么都可以匹配到Index
组件,这并不是想要的结果。
:
开始的,然后紧跟着传递的key(键名称)名称。
设置好规则后,就可以在Link
上设置值了,现在设置传递的ID
值了,这时候不用再添加id了,直接写值就可以了。
AppRouter.js
import React from "react";
import { BrowserRouter as Router, Route, Link } from "react-router-dom";
import Index from './Pages/Index'
import List from './Pages/List'
function AppRouter() {
return (
<Router>
<ul>
<li> <Link to="/">首页</Link> </li>
<li><Link to="/list/123">列表</Link> </li>
</ul>
<Route path="/" exact component={Index} />
<Route path="/list/:id" component={List} />
</Router>
);
}
export default AppRouter;
componentDidMount
中进行,传递的值在this.props.match
中
import React, { Component } from 'react';
class List extends Component {
constructor(props) {
super(props);
this.state = { }
}
render() {
return ( <h2>List Page</h2> );
}
//-关键代码---------start
componentDidMount(){
console.log(this.props.match)
}
//-关键艾玛---------end
}
export default List;
然后在浏览器的控制台中可以看到打印出的对象,对象包括三个部分:
明白了match中的对象属性,就可以轻松取得传递过来的ID值了。
import React, { Component } from 'react';
class List extends Component {
constructor(props) {
super(props);
this.state = { }
}
render() {
return ( <h2>List Page->{this.state.id}</h2> );
}
componentDidMount(){
// console.log(this.props.match.params.id)
let tempId=this.props.match.params.id
this.setState({id:tempId })
}
}
export default List;
cid
和title
constructor(props) {
super(props);
this.state = {
list:[
{cid:123,title:'个人博客-1'},
{cid:456,title:'个人博客-2'},
{cid:789,title:'个人博客-3'},
]
}
}
list
数组后,再修改一下UI,进行有效的遍历
render() {
return (
<ul>
{
this.state.list.map((item,index)=>{
return (
<li key={index}> {item.title} </li>
)
})
}
</ul>
)
}
列表已经可以在Index组件里显示出来了,接下来可以配置了,在配置之前,你需要先引入Link组件
import { Link } from "react-router-dom";
引入后直接使用进行跳转就可以,但是需要注意一点,要用{}
的形式,也就是把to
里边的内容解析成JS的形式,这样才能顺利的传值过去
render() {
return (
<ul>
{
this.state.list.map((item,index)=>{
return (
<li key={index}>
<Link to={'/list/'+item.uid}> {item.title}</Link>
</li>
)
})
}
</ul>
)
}