博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
尝试自己动手用react来写一个分页组件
阅读量:7250 次
发布时间:2019-06-29

本文共 3659 字,大约阅读时间需要 12 分钟。

分页效果

效果截图(样式可自行修改):

这里写图片描述

构建项目

create-react-app react-paging-component

分页组件

1.子组件

创建 Pagecomponent.js 文件

核心代码:

初始化值

constructor(props) {        super(props)        this.state = {            currentPage: 1, //当前页码            groupCount: 5, //页码分组,显示7个页码,其余用省略号显示            startPage: 1,  //分组开始页码            totalPage:1 //总页数        }    }
动态生成页码函数
createPage() {        const {currentPage, groupCount, startPage,totalPage} = this.state;        let pages = []        //上一页        pages.push(
  • 上一页
  • ) if (totalPage <= 10) { /*总页码小于等于10时,全部显示出来*/ for (let i = 1; i <= totalPage; i++) { pages.push(
  • {i}
  • ) } } else { /*总页码大于10时,部分显示*/ //第一页 pages.push(
  • 1
  • ) let pageLength = 0; if (groupCount + startPage > totalPage) { pageLength = totalPage } else { pageLength = groupCount + startPage; } //前面省略号(当当前页码比分组的页码大时显示省略号) if (currentPage >= groupCount) { pages.push(
  • ···
  • ) } //非第一页和最后一页显示 for (let i = startPage; i < pageLength; i++) { if (i <= totalPage - 1 && i > 1) { pages.push(
  • {i}
  • ) } } //后面省略号 if (totalPage - startPage >= groupCount + 1) { pages.push(
  • ···
  • ) } //最后一页 pages.push(
  • {totalPage}
  • ) } //下一页 pages.push(
  • 下一页
  • ) return pages; }

    页码点击函数:

    //页码点击    pageClick(currentPage) {        const {groupCount} = this.state        const getCurrentPage = this.props.pageCallbackFn;        //当 当前页码 大于 分组的页码 时,使 当前页 前面 显示 两个页码        if (currentPage >= groupCount) {            this.setState({                startPage: currentPage - 2,            })        }        if (currentPage < groupCount) {            this.setState({                startPage: 1,            })        }        //第一页时重新设置分组的起始页        if (currentPage === 1) {            this.setState({                startPage: 1,            })        }        this.setState({            currentPage        })        //将当前页码返回父组件        getCurrentPage(currentPage)    }

    上一页和下一页点击事件

    //上一页事件    prePageHandeler() {        let {currentPage} = this.state        if (--currentPage === 0) {            return false        }        this.pageClick(currentPage)    }    //下一页事件    nextPageHandeler() {        let {currentPage,totalPage} = this.state       // const {totalPage} = this.props.pageConfig;        if (++currentPage > totalPage) {            return false        }        this.pageClick(currentPage)    }

    组件渲染到DOM上

    render() {        const pageList = this.createPage();        return (            
      {pageList}
    ) }

    2.父组件

    创建 Pagecontainer.js 文件

    父组件完整代码

    import React, {Component} from 'react'import Pagecomponent from '../components/Pagecomponent'import data from '../mock/tsconfig.json'class Pagecontainer extends Component {    constructor() {        super()        this.state = {            dataList:[],            pageConfig: {                totalPage: data.length //总页码            }        }        this.getCurrentPage = this.getCurrentPage.bind(this)    }    getCurrentPage(currentPage) {        this.setState({            dataList:data[currentPage-1].name        })    }    render() {        return (            
    {this.state.dataList}
    ) }}export default Pagecontainer

    至此一个分页组件就开发完了,如有疑问欢迎到我个人博客的该文章下留言,

    原文地址:

    打个小广告~~~~欢迎访问我的个人博客

    转载地址:http://amhbm.baihongyu.com/

    你可能感兴趣的文章
    独家解析Javascript原型继承
    查看>>
    springboot集成mqtt
    查看>>
    重拾css(3)——学习css的思路
    查看>>
    SegmentFault 社区访谈 | 有位公子在奇舞
    查看>>
    jQuery源码分析之jQuery的定义
    查看>>
    一些经典面试题分析(上)
    查看>>
    [JS相关的记录01] 那什么来面对你,面向对象编程(__proto__,prototype,constructor以及原型链)...
    查看>>
    夏日葵电商:搭建一个商城系统,N+功能方案揭秘!
    查看>>
    Akka系列(一):Akka简介与Actor模型
    查看>>
    yii2获得从数据库获得数据的方法并处理
    查看>>
    Android开发百度地图(一)之初体验
    查看>>
    微服务指南走北(四):你不愿意做微服务架构的十个理由
    查看>>
    CSS代码重构与优化之路
    查看>>
    使用 sigprocmask 和 sigpending 在程序正文中捕获和处理信号
    查看>>
    Bodymovin插件的使用
    查看>>
    详细深入分析 Java ClassLoader 工作机制
    查看>>
    关于设计模式
    查看>>
    对一个“老”架构的重新思考
    查看>>
    DoubanFMPlayer, A mimic of Douban.fm player
    查看>>
    埃森哲、亚马逊和万事达卡抱团推出的区块链项目有何神通?
    查看>>