效果演示
以下是核心代码
src/index.js
import React,{Component} from 'react';
import ReactDom from 'react-dom';
import { Layout } from 'antd';
import 'antd/dist/antd.css';
import './style.css';
import AppHeader from './components/AppHeader/';
import {BrowserRouter,Route,Switch} from 'react-router-dom';
import Detail from './containers/Detail/';
import PageList from './containers/List/';
const { Header, Footer, Content } = Layout;
class App extends Component{
render(){
return(
<BrowserRouter>
<Layout style={{minWidth:1200,height:'100%'}}>
<Header className="header"><AppHeader/></Header>
<Content className="content">
<Switch>
<Route path="/detail" component={Detail}/>
{/* /:id?代表参数可传可不传 */}
<Route path="/:id?" component={PageList}/>
</Switch>
</Content>
<Footer className="footer">@copyright cyy 2020</Footer>
</Layout>
</BrowserRouter>
)
}
}
ReactDom.render(<App/>,document.getElementById('root'));
components/AppHeader/index.js
import React,{Component,Fragment} from 'react';
import logo from './logo.png';
import './style.css';
import { Menu } from 'antd';
import axios from 'axios';
import { Icon } from '@ant-design/compatible';
import {Link} from 'react-router-dom';
class AppHeader extends Component{
constructor(props){
super(props);
this.state={
list:[]
}
}
componentDidMount(){
axios.get("http://www.dell-lee.com/react/api/header.json")
.then(res=>{
console.log(res.data.data);
this.setState({
list:res.data.data
})
})
}
createMenuItem(){
return this.state.list.map(item=>{
return(
<Menu.Item key={item.id}>
<Link to={`/${item.id}`}>
<Icon type={item.icon} />
{item.title}
</Link>
</Menu.Item>
)
})
}
render(){
return(
<Fragment>
<img src={logo} className="logo" />
<Menu mode="horizontal" className="menu">{this.createMenuItem()}</Menu>
</Fragment>
)
}
}
export default AppHeader;
containers/List/index.js
import React,{Component} from 'react';
import { List, Typography } from 'antd';
import axios from 'axios';
class PageList extends Component{
constructor(props){
super(props);
this.state={
data:[]
}
}
componentWillReceiveProps(nextProps){
const id=nextProps.match.params.id;
axios.get("http://www.dell-lee.com/react/api/list.json?id="+id)
.then(res=>{
this.setState({
data:res.data.data
})
})
}
componentDidMount(){
let url="http://www.dell-lee.com/react/api/list.json";
const id=this.props.match.params.id;
if(id){
url=url+"?id="+id;
}
axios.get("http://www.dell-lee.com/react/api/list.json?id="+id)
.then(res=>{
this.setState({
data:res.data.data
})
})
}
render(){
return(
<List
style={{background:'#fff'}}
bordered
dataSource={this.state.data}
renderItem={item => (
<List.Item>
<Typography.Text mark>[ITEM]</Typography.Text> {item.title}
</List.Item>
)}
/>
)
}
}
export default PageList;
来源:oschina
链接:https://my.oschina.net/u/4258423/blog/3237974