zoukankan      html  css  js  c++  java
  • React实现新闻网站--使用动态路由获取不同列表内容

    效果演示

    以下是核心代码

    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;
  • 相关阅读:
    JS的冒泡事件
    Java基础之断言
    Spring中AOP切面编程学习笔记
    如何将Excel导入到Mysql数据库中
    关于数据库分析较好的文章汇总
    Spring 事务相关点整理
    spring中scope的prototype与singleton区别
    设计模式学习(三)——单例模式
    Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.******.seashell.bpc.query.query.service.FscBankPayCodeQueryService
    ArrayList源码解读笔记
  • 原文地址:https://www.cnblogs.com/chenyingying0/p/12715950.html
Copyright © 2011-2022 走看看