Skip to content

Pagination 分页

分页器用于分隔长列表,每次只加载一个页面。

前置条件

在react项目入口文件中引入样式,默认为src/main.tsx

tsx
import 'ono-react-element/dist/style/Pagination.css'

基础用法

tsx
import React, { useState } from'react'
import { Pagination } from 'ono-react-element'

function App() {
    const [currentPage, setCurrentPage] = useState<number>(1)

    return <div>
        <Pagination
            total={10} //总页数
            currentPage={currentPage} //当前页码
            onChange={setCurrentPage} //页码改变的回调函数
        />
    </div>
}

export default App;

自定义首页和尾页按钮样式

tsx
import React, { useState } from'react'
import { Pagination } from 'ono-react-element'

function App() {
    const [currentPage, setCurrentPage] = useState<number>(1)

    return <div>
        <Pagination
            total={10} //总页数
            currentPage={currentPage} //当前页码
            onChange={setCurrentPage} //页码改变的回调函数
            firstBtn={
                <div
                    style={{
                        color: '#333',
                        padding: '4px 8px',
                        borderRadius: '4px',
                        backgroundColor: 'white',
                        border: '1px solid #e5e5e5',
                    }}
                >
                    首页
                </div>
            }
            lastBtn={
                <div
                    style={{
                        color: '#333',
                        padding: '4px 8px',
                        borderRadius: '4px',
                        backgroundColor: 'white',
                        border: '1px solid #e5e5e5',
                    }}
                >
                    尾页
                </div>
            }
        />
    </div>
}

export default App;

自定义页码按钮样式

tsx
import React, { useState } from'react'
import { Pagination } from 'ono-react-element'

function App() {
    const [currentPage, setCurrentPage] = useState<number>(1)

    return <div>
        <Pagination
            total={10} //总页数
            currentPage={currentPage} //当前页码
            onChange={setCurrentPage} //页码改变的回调函数
        >
            {({ page, isActive }) => (
                <div
                    style={{
                        width: '40px',
                        display: 'flex',
                        aspectRatio: '1',
                        cursor: 'pointer',
                        borderRadius: '50%',
                        alignItems: 'center',
                        justifyContent: 'center',
                        border: '1px solid #e5e5e5',
                        color: isActive ? 'white' : '#333',
                        backgroundColor: isActive ? '#765def' : 'white'
                    }}
                >
                    {page}
                </div>
            )}
        </Pagination>
    </div>
}

export default App;

自定义上一页和下一页按钮样式

tsx
import React, { useState } from'react'
import { Pagination } from 'ono-react-element'

function App() {
    const [currentPage, setCurrentPage] = useState<number>(1)

    return <div>
        <Pagination
            total={10} //总页数
            currentPage={currentPage} //当前页码
            onChange={setCurrentPage} //页码改变的回调函数
            prevBtn={(isActive) =>
                <div
                    style={{
                        color: '#333',
                        padding: '4px 8px',
                        borderRadius: '4px',
                        backgroundColor: 'white',
                        border: '1px solid #e5e5e5',
                        opacity: isActive ? 1 : 0.5
                    }}
                >
                    上一页
                </div>
            }
            nextBtn={(isActive) =>
                <div
                    style={{
                        color: '#333',
                        padding: '4px 8px',
                        borderRadius: '4px',
                        backgroundColor: 'white',
                        border: '1px solid #e5e5e5',
                        opacity: isActive ? 1 : 0.5
                    }}
                >
                    下一页
                </div>
            }
        />
    </div>
}

export default App;

当到达首页或尾页时,禁用上一页或下一页按钮

tsx
import React, { useState } from'react'
import { Pagination } from 'ono-react-element'

function App() {
    const [currentPage, setCurrentPage] = useState<number>(1)

    return <div>
        <Pagination
            total={10} //总页数
            currentPage={currentPage} //当前页码
            onChange={setCurrentPage} //页码改变的回调函数
            hiddenNextBtnOnLastPage //当到达尾页时,隐藏下一页按钮
            hiddenPrevBtnOnFirstPage //当到达首页时,隐藏上一页按钮
        />
    </div>
}

export default App;

API

通用属性参考:通用属性

参数说明类型默认值是否必填
currentPage当前页码number-
total总页数number-
onChange页码改变的回调函数(page: number) => void-
className自定义样式类名string-
style自定义样式对象CSSProperties-
pageBtnClassName自定义页码按钮样式类名string-
pageBtnActiveClassName自定义页码按钮激活样式类名string-
hiddenNextBtnOnLastPage当到达尾页时,隐藏下一页按钮booleanfalse
hiddenPrevBtnOnFirstPage当到达首页时,隐藏上一页按钮booleanfalse
firstBtn自定义首页按钮ReactNodenull
lastBtn自定义尾页按钮ReactNodenull
prevBtn自定义上一页按钮ReactNode|(isActive: boolean) => ReactNodenull
nextBtn自定义下一页按钮ReactNode|(isActive: boolean) => ReactNodenull
children自定义页码按钮({page, isActive}: {page: number; isActive: boolean}) => ReactNodenull