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/:id" 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'));

    containers/List/index.js

    import React,{Component} from 'react';
    import { List, Typography } from 'antd';
    import axios from 'axios';
    import {Link} from 'react-router-dom';
     
    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>
                            <Link to={`/detail/${item.id}`}>
                                <Typography.Text mark>[ITEM]</Typography.Text> {item.title}
                            </Link>
                        </List.Item>
                    )}
                    />
            )
        }
    }
    
    export default PageList;

    containers/Detail/index.js

    import React,{Component} from 'react';
    import { Card } from 'antd';
    import axios from 'axios';
    import './style.css';
    
    class Detail extends Component{
        constructor(props){
            super(props);
            this.state={
                title:'',
                content:''
            }
        }
    
        componentDidMount(){
            const id=this.props.match.params.id;
            axios.get("http://www.dell-lee.com/react/api/detail.json?id="+id)
            .then(res=>{
                const data=res.data.data;
                this.setState(data);
            })
        }
        render(){
            console.log(this.props.match.params.id);
            return(
                <Card title={this.state.title}>
                <div class="detail" dangerouslySetInnerHTML={{__html:this.state.content}}></div>
                </Card>
            )
        }
    }
    
    export default Detail;

    containers/Detail/style.css

    .detail img{
        float:left;
        margin-right:10px;
    }
  • 相关阅读:
    一个Fragment的实例
    使用LayoutInflater添加一个布局引用
    11F:42点
    11E:分形盒
    11D:猴子摘桃
    11C:寻找边缘
    11B:夺宝探险
    10J:判断整除
    11A:篮球联赛
    10I:核电站
  • 原文地址:https://www.cnblogs.com/chenyingying0/p/12716169.html
Copyright © 2011-2022 走看看