大家多少都自己写过各种版本的分页工具条吧,像纯服务版的,纯jsWeb板的,Angular版的,因为这个基础得不能再基础的功能太多地方都会用到,下面我给出以个用ReactJS实现的版本,首先上图看下效果:

注意这个组件需要ES6环境,最好使用NodeJS结合Webpack来打包:webpack --display-error-details --config webpack.config.js
此React版分页组件请亲们结合redux来使用比较方便,UI = Fn(State)
基本流程就是:用户交互->Action->Reduce->Store->UIRender
了解以上基础知识却非常必要,但不是我此次要说的重点,以上相关知识请各位自行补脑,废话就不多说,直接上代码。
filename: paging-bar.js
import React, { Component } from 'react'
import Immutable from 'immutable'
import _ from 'lodash'
/* ================================================================================
* React GrxPagingBar 通用分页组件
* author: 天真的好蓝啊
* ================================================================================ */
class GrxPagingBar extends Component {
render() {
var pagingOptions = {
showNumber: 5,
firstText: "<<",
firstTitle: "第一页",
prevText: "<",
prevTitle: "上一页",
beforeTitle: "前",
afterTitle: "后",
pagingTitle: "页",
nextText: ">",
nextTitle: "下一页",
lastText: ">>",
lastTitle: "最后一页",
classNames: "grx-pagingbar pull-right",
}
$.extend(pagingOptions, this.props.pagingOptions)
return (
<div className={pagingOptions.classNames} >
<GrxPagingFirst {...pagingOptions} {...this.props} />
<GrxPagingBeforeAfter isBefore="true" {...pagingOptions} {...this.props} />
<GrxPagingList {...pagingOptions} {...this.props} />
<GrxPagingBeforeAfter isBefore="false" {...pagingOptions} {...this.props} />
<GrxPagingLast {...pagingOptions} {...this.props} />
<GrxPagingInfo {...this.props} />
</div>
)
}
}
/* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
* 分页条头组件
* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
class GrxPagingFirst extends Component {
render() {
var ids = []
let paging = this.props.items.get('Paging')
let current = paging.get('PagingIndex')
let pagingIndex = current - 1
if(paging.get('PagingIndex') != 1){
ids.push(1)
}
let html = ids.map(
(v,i) =>
<span>
<GrxPagingNumber title={this.props.firstTitle} text={this.props.firstText} pagingIndex={1} {...this.props}/>
<GrxPagingNumber title={this.props.prevTitle} text={this.props.prevText} pagingIndex={pagingIndex} {...this.props}/>
</span>
)
return (
<span className="grx-pagingbar-fl">
{html}
</span>
)
}
}
/* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
* 分页条前后页组件
* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
class GrxPagingBeforeAfter extends Component {
render() {
var ids = []
let isBefore = this.props.isBefore == "true" ? true : false
let paging = this.props.items.get('Paging')
let pagingCount = paging.get('PagingCount')
let current = paging.get('PagingIndex')
let pagingIndex = isBefore ? current - this.props.showNumber : current + this.props.showNumber
let title = (isBefore ? this.props.beforeTitle : this.props.afterTitle) + (this.props.showNumber + 1) + this.props.pagingTitle
if(isBefore && current > this.props.showNumber + 1){
ids.push(1)
}else if(!isBefore && current < pagingCount - this.props.showNumber){
ids.push(1)
}
var html = ids.map(
(v,i) => <a href="###" onClick={this.props.actions.pagingAction.bind(this, pagingIndex)} title={title}>..</a>
)
return (
<span>
{html}
</span>
)
}
}
/* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
* 分页条页码列表组件
* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
class GrxPagingList extends Component {
render(){
let paging = this.props.items.get('Paging')
let count = paging.get('PagingCount')
let current = paging.get('PagingIndex')
let start = current - this.props.showNumber
let end = current + this.props.showNumber
var pageIndexs = new Array();
for(var i = start; i < end; i ++) {
if( i == current){
pageIndexs.push(i)
}else if(i > 0 & i <= count) {
pageIndexs.push(i)
}
}
var pagingList = pageIndexs.map(
(v,i) =>
current == v ?
count > 1 ? <span className="grx-pagingbar-current">{v}</span> : ""
:
<GrxPagingNumber pagingIndex={v} {...this.props} />
)
return(
<span>
{pagingList}
</span>
)
}
}
/* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
* 分页条尾部组件
* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
class GrxPagingLast extends Component {
render() {
var ids = []
let paging = this.props.items.get('Paging')
let pagingCount = paging.get('PagingCount')
let current = paging.get('PagingIndex')
let pagingIndex = current + 1
if(paging.get('PagingIndex') < paging.get('PagingCount')){
ids.push(1)
}
let html = ids.map(
(v,i) =>
<span>
<GrxPagingNumber title={this.props.nextTitle} text={this.props.nextText} pagingIndex={pagingIndex} {...this.props}/>
<GrxPagingNumber title={this.props.lastTitle} text={this.props.lastText} pagingIndex={pagingCount} {...this.props} />
</span>
)
return (
<span className="grx-pagingbar-fl">
{html}
</span>
)
}
}
/* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
* 分页页码组件
* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
class GrxPagingNumber extends Component {
render(){
let pagingIndex = this.props.pagingIndex
let title = "第"+ pagingIndex + this.props.pagingTitle
let text = pagingIndex
if(this.props.title){
title = this.props.title
}
if(this.props.text){
text = this.props.text
}
return(
<a href="###" onClick={this.props.actions.pagingAction.bind(this, pagingIndex)} title={title}> {text} </a>
)
}
}
/* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
* 分页条信息组件
* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
class GrxPagingInfo extends Component {
render() {
let paging = this.props.items.get('Paging')
let pagingIndex = paging.get('PagingIndex')
let pagingCount = paging.get('PagingCount')
let totalRecord = paging.get('TotalRecord')
return (
<span className="grx-pagingbar-info">第{pagingIndex}/{pagingCount}页,共{totalRecord}条数据</span>
)
}
}
/* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
* 从此模块导出分页条组件
* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
export default GrxPagingBar
使用方法:
import React, { Component } from 'react'
import _ from 'lodash'
import classNames from 'classnames'
import PagingBar from '.paging-bar'
/* ================================================================================
* React PagingBar使用范例组件
* ================================================================================ */
class PagingBarExample extends Component {
render() {
let pagingOptions = {
showNumber: 3
}
return (
<table className="table table-condensed">
<tbody>
<tr>
<td>
<PagingBar pagingOptions={pagingOptions} {...this.props} />
</td>
</tr>
</tbody>
</table>
)
}
}
附上Paging这个分页数据对象的结构paging.go服务端的Data Struct:
package commons
import (
"math"
)
type (
Paging struct {
PagingIndex int64
PagingSize int64
TotalRecord int64
PagingCount int64
Sortorder string
}
)
func (paging *Paging) SetTotalRecord(totalRecord int64) {
//paging.PagingIndex = 1
paging.PagingCount = 0
if totalRecord > 0 {
paging.TotalRecord = totalRecord
paging.PagingCount = int64(math.Ceil(float64(paging.TotalRecord) / float64(paging.PagingSize)))
}
}
func (paging *Paging) Offset() int64 {
if paging.PagingIndex <= 1 || paging.PagingSize == 0 {
return 0
}
offset := (paging.PagingIndex * paging.PagingSize) - paging.PagingSize + 1
return offset
}
func (paging *Paging) EndIndex() int64 {
if paging.PagingIndex <= 1 {
return paging.PagingSize
}
offset := paging.PagingIndex * paging.PagingSize
return offset
}
以上所述是小编给大家介绍的Reactjs实现通用分页组件的实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
# reactjs分页组件
# react分页显示数据的方法
# React实现分页效果
# 尝试自己动手用react来写一个分页组件(小结)
# 使用React MUI库实现用户列表分页功能
# 分页
# 小编
# 太多
# 下一页
# 在此
# 上一页
# 就不
# 给大家
# 请各位
# 多说
# 第一页
# 能再
# 所述
# 写过
# 给我留言
# 工具条
# 服务端
# 感谢大家
# 相关知识
# 后页
相关文章:
建站之星如何防范黑客攻击与数据泄露?
官网建站费用明细查询_企业建站套餐价格及收费标准指南
如何用虚拟主机快速搭建网站?详细步骤解析
公司网站建设制作费用,想建设一个属于自己的企业网站,该如何去做?
制作网站的公司有哪些,做一个公司网站要多少钱?
C++ static_cast和dynamic_cast区别_C++静态转换与动态类型安全转换
子杰智能建站系统|零代码开发与AI生成SEO优化指南
武清网站制作公司,天津武清个人营业执照注销查询系统网站?
上海网站制作开发公司,上海买房比较好的网站有哪些?
Thinkphp 中 distinct 的用法解析
天河区网站制作公司,广州天河区如何办理身份证?需要什么资料有预约的网站吗?
制作销售网站教学视频,销售网站有哪些?
设计网站制作公司有哪些,制作网页教程?
b2c电商网站制作流程,b2c水平综合的电商平台?
移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?
如何选择高效稳定的ISP建站解决方案?
建站之星安装步骤有哪些常见问题?
学校为何禁止电信移动建设网站?
矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?
图册素材网站设计制作软件,图册的导出方式有几种?
深入理解Android中的xmlns:tools属性
平台云上自助建站如何快速打造专业网站?
ppt在线制作免费网站推荐,有什么下载免费的ppt模板网站?
如何通过WDCP绑定主域名及创建子域名站点?
如何设置并定期更换建站之星安全管理员密码?
高端企业智能建站程序:SEO优化与响应式模板定制开发
Android自定义listview布局实现上拉加载下拉刷新功能
实现虚拟支付需哪些建站技术支撑?
网站设计制作企业有哪些,抖音官网主页怎么设置?
定制建站价位费用解析与套餐推荐全攻略
网页设计与网站制作内容,怎样注册网站?
广州营销型建站服务商推荐:技术优势与SEO优化解析
,石家庄四十八中学官网?
如何高效配置IIS服务器搭建网站?
宝盒自助建站智能生成技巧:SEO优化与关键词设置指南
大连网站制作公司哪家好一点,大连买房网站哪个好?
如何选择CMS系统实现快速建站与SEO优化?
建站之星如何实现五合一智能建站与营销推广?
如何快速生成橙子建站落地页链接?
如何在建站宝盒中设置产品搜索功能?
详解jQuery中基本的动画方法
如何用IIS7快速搭建并优化网站站点?
宝塔建站教程:一键部署配置流程与SEO优化实战指南
娃派WAP自助建站:免费模板+移动优化,快速打造专业网站
网站建设制作需要多少钱费用,自己做一个网站要多少钱,模板一般多少钱?
制作无缝贴图网站有哪些,3dmax无缝贴图怎么调?
如何设计高效校园网站?
如何在云主机快速搭建网站站点?
在线制作视频的网站有哪些,电脑如何制作视频短片?
如何在云服务器上快速搭建个人网站?
*请认真填写需求信息,我们会在24小时内与您取得联系。