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,1)">;
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=.props.match.params.id;
        if(id){
            url=url+"?id="+id;
        }
        axios.get("http://www.dell-lee.com/react/api/list.json?id="+.setState({
                data:res.data.data
            })
        })
    }

    render(){
        (
            <List
                style={{background:'#fff'}}
                bordered
                dataSource={.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,1)">;
import { Card } from 'antd';

class Detail extends Component{
    constructor(props){
        super(props);
        {
            title:'',content:''
        }
    }

    componentDidMount(){
        const id=.props.match.params.id;
        axios.get("http://www.dell-lee.com/react/api/detail.json?id="+{
            const data=res.data.data;
            .setState(data);
        })
    }
    render(){
        console.log(.props.match.params.id);
        (
            <Card title={this.state.title}>
            <div class="detail" dangerouslySetInnerHTML={{__html:this.state.content}}></div>
            </Card>
default Detail;

 

containers/Detail/style.css

.detail img{
    float:left;
    margin-right:10px;
}

 

相关文章

react 中的高阶组件主要是对于 hooks 之前的类组件来说的,如...
我们上一节了解了组件的更新机制,但是只是停留在表层上,例...
我们上一节了解了 react 的虚拟 dom 的格式,如何把虚拟 dom...
react 本身提供了克隆组件的方法,但是平时开发中可能很少使...
mobx 是一个简单可扩展的状态管理库,中文官网链接。小编在接...
我们在平常的开发中不可避免的会有很多列表渲染逻辑,在 pc ...