当前位置:网站首页>定制一个自己项目里需要的分页器
定制一个自己项目里需要的分页器
2022-07-04 03:57:00 【新生代农民工官方认证码农小拽】
效果图:

代码:
/**简易分页器组件 * * API: * @currentPage 当前页码 * @pageSize 每页显示多少条 * @total 数据总数 * @onPageChange 当前页发生变化时触发的回调,参数是更新后的页码。子传父的关键。 */
import React, {
useState } from 'react'
import styles from './index.less'
const defaultCurrent = 1 // 默认当前页
const defaultPageSize = 20 // 默认每页20条数据
const defaultTotal = 0 // 默认总数为0
const valueLimit = /^\+?[1-9]\d*$/ // 限定输入页码为正整数
const Pagin = props => {
let {
currentPage, pageSize, total, onPageChange } = props
currentPage = currentPage || defaultCurrent
pageSize = pageSize || defaultPageSize
total = total || defaultTotal
const [current, setCurrent] = useState(currentPage)
const [page, setPage] = useState(1)
const handlePre = () => {
if (onPageChange && current > 1) {
onPageChange(current - 1)
setCurrent(current - 1)
}
}
const handleNext = () => {
if (onPageChange && current < Math.ceil(total / pageSize)) {
onPageChange(current + 1)
setCurrent(current + 1)
}
}
const handleChange = e => {
const val = e.target.value
if (valueLimit.test(val) || val === '') {
setPage(val)
}
}
const jumpToPage = () => {
if (onPageChange && page >= 1 && page <= Math.ceil(total / pageSize)) {
onPageChange(page)
setCurrent(Number(page))
}
}
return <>
{
total > 0
&&
<div className={
styles.pagin}>
<div className={
styles.left}>
<div className={
`${
styles.pre} ${
current <= 1 ? '' : styles.active}`} onClick={
handlePre}>上一页</div>
<div className={
styles.current}>{
current}</div>
<div className={
`${
styles.next} ${
current >= Math.ceil(total / pageSize) ? '' : styles.active}`} onClick={
handleNext}>下一页</div>
</div>
<div className={
styles.rig}>
<span className={
styles.total}>共{
Math.ceil(total / pageSize)}页</span>
<div className={
styles.jump_wrap}>
<span className={
styles.jump_btn} onClick={
jumpToPage}>前往</span>
<input
type="text"
autoComplete='off'
className={
styles.jump_num}
value={
page}
onChange={
e => {
handleChange(e)}}
/>
<span>页</span>
</div>
</div>
</div>
}
</>
}
export default Pagin
样式:
.pagin {
position: relative;
display: flex;
justify-content: space-between;
height: 38px;
margin-top: 40px;
box-sizing: border-box;
padding: 0 10px;
font-size: 14px;
font-weight: 400;
color: #222;
.left {
width: 210px;
display: flex;
justify-content: space-between;
.current {
width: 38px;
height: 100%;
border-radius: 4px;
text-align: center;
line-height: 38px;
color: #fff;
background-color: #673ab7cc;
}
.pre, .next {
width: 75px;
height: 100%;
text-align: center;
line-height: 38px;
color: #c0c4cc;
background-color: #f4f4f5;
border-radius: 4px;
user-select: none;
-webkit-user-select: none;
cursor: not-allowed;
&.active {
color: #fff;
background-color: #673ab7cc;
cursor: pointer;
}
}
}
.rig {
display: flex;
align-items: center;
gap: 10px;
.jump_wrap {
display: flex;
gap: 3px;
align-items: center;
margin-top: 0;
.jump_btn {
color: #673ab7cc;
user-select: none;
-webkit-user-select: none;
cursor: pointer;
}
.jump_num {
width: 46px;
height: 28px;
text-align: center;
color: #606266;
border: 1px solid #dcdfe6;
border-radius: 3px;
&:focus {
border: 1px solid #673ab7cc;
}
}
}
}
}
使用示例:
import React from 'react'
import styles from './index.less'
import Pagin from '@pages/pagin'
const App = () => {
const onPageChange = (page) => {
console.log('page: ', page)
}
return <div>
<Pagin onPageChange={
onPageChange} total={
41} />
</div>
}
边栏推荐
- MySQL JDBC编程
- Correct the classpath of your application so that it contains a single, compatible version of com.go
- 2022年6月总结
- PostgreSQL 正式超越 MySQL,这家伙也太强了吧!
- Instructions for LPC interrupt binding under ft2000+
- STM32F1与STM32CubeIDE编程实例-74HC595驱动4位7段数码管
- Beipiao programmer, 20K monthly salary, 15W a year, normal?
- Correct the classpath of your application so that it contains a single, compatible version of com. go
- Definition of DCDC power supply current
- Introduction and application of rampax in unity: optimization of dissolution effect
猜你喜欢

附件六:防守工作简报.docx
![[security attack and Defense] how much do you know about serialization and deserialization?](/img/cd/cc7d53b818e9a45dec22eada11bb24.png)
[security attack and Defense] how much do you know about serialization and deserialization?

测试 CS4344 立体声DA转换器

FT2000+下LPC中断绑核使用说明

关于solidworks standard无法获得许可 8544问题的总结

分享一些我的远程办公经验

Kivy教程之 格式化文本 (教程含源码)

Sample template of software design document - learning / practice

What is context?

MySQL indexes and transactions
随机推荐
网络设备应急响应指南
【MATLAB】MATLAB 仿真模拟调制系统 — FM 系统
leetcode:1314. 矩阵区域和【二维前缀和模板】
红队视角下的防御体系突破之第二篇案例分析
Many founders of technology companies provided enterpriser first with a round C financing of up to US $158million to help it invest in the next generation of global innovators
【MATLAB】通信信号调制通用函数 — 傅里叶逆变换
附件四:攻击方评分标准.docx
Correct the classpath of your application so that it contains a single, compatible version of com. go
B. All Distinct
Exploration and practice of eventbridge in the field of SaaS enterprise integration
Acwing game 58
Operate the server remotely more gracefully: the practice of paramiko Library
【MATLAB】MATLAB 仿真模拟调制系统 — VSB 系统
Redis: order collection Zset type data operation command
Sample template of software design document - learning / practice
Flutter ‘/usr/lib/libswiftCore.dylib‘ (no such file)
更优雅地远程操作服务器:Paramiko库的实践
【Go】数据库框架gorm
Formatted text of Kivy tutorial (tutorial includes source code)
How to view installed r packages in R language