loading

import React, { Component, Fragment } from 'react'
import axios from "axios"
import classifyDetail from "../../scss/classify/classifyDetail.module.scss"
import { withRouter } from 'react-router-dom';




class ClassifyDetail extends Component {
    constructor() {
        super()
        this.state = {
            tab: [
                {
                    name: "综合排序",
                    key: ''
                },
                {
                    name: "做过最多",
                    key: "dishNum"

                },
                {
                    name: "达人食谱",
                    key: "master"

                },
            ],//定义页面上边nav的内容

            searchKey: '',//路由跳转传递过来的关键词,是要在上边展示的
            pageIndex: 0,//定义发送请求时的相关参数
            isActive: "",
            show_list: [],//定义展示用的数组
            isloading:false// loading 如果是true 就让loading这个图出现,false 隐藏
        }
    }
    componentDidMount() {
        this.setState({
            searchKey: this.props.match.params.name
        }, () => {
            console.log(this.state.searchKey)
            this.get_all()
        })
        // this.refs.scroll.addEventListener("scroll", this.get_onScroll, true)
        //可以这里监听,也可以下边绑定滚动事件,注意是监听dom节点,不是window

    }
    //页面跳转过来获取全部数据
    get_all = () => {
        //请求数据 让loading图出现
        this.setState({
            isloading:true
        })
        axios.get(`https://api.hongbeibang.com/search/getMoreRecipe?pageIndex=${this.state.pageIndex}&pageSize=10&keyword=${this.state.searchKey}&sort=${this.state.isActive}`)
            .then((res) => {
                // 拿到参数之后 让loading 隐藏
                this.setState({
                    isloading:false
                })
                //这块的判断是有必要的,如果数组长度为0,说明是第一次请求数据,否则是再此基础上继续请求数据
                if (this.state.show_list.length === 0) {
                    this.setState({
                        show_list: res.data.data.search.list.recipe.data
                    }, () => {
                        // console.log(this.state.show_list)
                    })
                } else {
                    //长度不为0,说明之前已经有数据了,是再次请求,需要解构数组
                    let newArr = this.state.show_list
                    newArr = newArr.concat(res.data.data.search.list.recipe.data)
                    this.setState({

                        show_list: newArr
                    }, () => {
                        // console.log(this.state.show_list)
                    })
                }
            })
    }
    //点击li,切换相关展示内容,传递这里定义的key,作为参数,发送请求
    tabsChange = (key) => {
        //点击时,修改定义的相关内容
        this.setState({
            pageIndex: 0,
            isActive: key,
            show_list: [],
        }, () => {
            this.get_all()
        })
    }

    //鼠标滚动获取数据
    get_onScroll = (e) => {
        let { scroll } = this.refs
        // scrollTop为滚动条在Y轴上的滚动距离。
        // clientHeight为内容可视区域的高度。
        // scrollHeight为内容可视区域的高度加上溢出(滚动)的距离。
        if (scroll.scrollHeight >
            scroll.clientHeight && scroll.scrollTop +
            scroll.clientHeight === scroll.scrollHeight) {

            this.setState({
                pageIndex: this.state.pageIndex + 10,
            }, () => {
                this.get_all()
            })
        }
    }
    //点击跳转到下个页面
    toItem = (id) => {
        this.props.history.push(`/recipe/${id}`)
    }

    render() {
        let { tab, show_list, isActive } = this.state
        let style1 = {
            display:'none'
        }
        return (
            <Fragment>
                <div >
                    <ul className={classifyDetail.nav} >
                        {
                            tab.map((item) => <li key={item.key}
                                className={isActive === item.key ? classifyDetail.active : ""}
                                onClick={this.tabsChange.bind(this, item.key)}>{item.name}</li>)
                        }

                    </ul>
                    <div ref="scroll" onScroll={this.get_onScroll} className={classifyDetail.scrollcontent}>
                        <div style={{ height: "50px" }}></div>
                        {
                            show_list.map((item, index) => {
                                return <div className={classifyDetail.content} key={index} onClick={this.toItem.bind(this, item.contentId)}>
                                    <div className={classifyDetail.imgbox}>
                                        <img src={item.coverImage} alt="" />
                                    </div>
                                    <div className={classifyDetail.text}>
                                        <h2>{item.coverTitle}</h2>
                                        <p className={classifyDetail.p1}>{item.clientName}</p>
                                        <p className={classifyDetail.p2}>
                                            <span>{item.collectNum}收藏</span>
                                            <span>{item.dishNum}人做过</span>
                                        </p>
                                    </div>
                                </div>
                            })
                        }
                        <div style={this.state.isloading? null : style1} className={classifyDetail.loading}>
                            <img src={require('./image/loading.png')} alt=""/>
                        </div>
                    </div>
                    
                </div>
            </Fragment>
        )
    }
}
export default withRouter(ClassifyDetail);
Python网络爬虫与推荐算法新闻推荐平台:网络爬虫:通过Python实现新浪新闻的爬取,可爬取新闻页面上的标题、文本、图片、视频链接(保留排版) 推荐算法:权重衰减+标签推荐+区域推荐+热点推荐.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值