Pagination 翻页器

如果项目中使用的是 0.x 版本的基础组件(@icedesign/base, @ali/ice, @alife/next),请在左侧导航顶部切换组件版本。

安装方法

  1. 在命令行中执行以下命令npm install @alifd/next@latest -S

开发指南

何时使用

在有大量内容展现需要进行分页加载处理的时候。

API

Pagination

参数说明类型默认值
size分页组件大小可选值:'small', 'medium', 'large'Enum'medium'
type分页组件类型可选值:'normal', 'simple', 'mini'Enum'normal'
shape前进后退按钮样式可选值:'normal', 'arrow-only', 'arrow-prev-only', 'no-border'Enum'normal'
current(受控)当前页码Number-
defaultCurrent(非受控)初始页码Number1
onChange页码发生改变时的回调函数签名:Function(current: Number, e: Object) => void参数:current: {Number} 改变后的页码数e: {Object} 点击事件对象Function() => {}
total总记录数Number100
totalRender总数的渲染函数签名:Function(total: Number, range: Array) => void参数:total: {Number} 总数range: {Array} 当前数据在总数中的区间Function-
pageShowCount页码显示的数量,更多的使用…代替Number5
pageSize一页中的记录数Number10
pageSizeSelector每页显示选择器类型可选值:false, 'filter', 'dropdown'Enumfalse
pageSizeList每页显示选择器可选值Array<Number>/Array<Object>5, 10, 20
pageNumberRender自定义页码渲染函数,函数作用于页码button以及当前页/总页数的数字渲染签名:Function(index: Number) => ReactNode参数:index: {Number} 分页的页码,从1开始返回值:{ReactNode} 返回渲染结果Functionindex => index
pageSizePosition每页显示选择器在组件中的位置可选值:'start', 'end'Enum'start'
useFloatLayout存在每页显示选择器时是否使用浮动布局Booleanfalse
onPageSizeChange每页显示记录数量改变时的回调函数签名:Function(pageSize: Number) => void参数:pageSize: {Number} 改变后的每页显示记录数Function() => {}
hideOnlyOnePage当分页数为1时,是否隐藏分页器Booleanfalse
showJumptype 设置为 normal 时,在页码数超过5页后,会显示跳转输入框与按钮,当设置 showJump 为 false 时,不再显示该跳转区域Booleantrue
link设置页码按钮的跳转链接,它的值为一个包含 {page} 的模版字符串,如:http://xxx.com/{page}String-
popupProps弹层组件属性,透传给PopupObject-

ARIA and KeyBoard

按键说明
Tab切换页数
Space按下按钮
Enter按下按钮

代码示例

非受控分页

非受控分页,是指分页组件的状态由自己维护,组件值的改变可以通过 onChange 事件通知父组件,默认值由 defaultCurrent 初始化。

Pagination 翻页器 - 图1

查看源码在线预览

  1. import { Pagination } from '@alifd/next';
  2. const change = function(value) {
  3. console.log(value);
  4. };
  5. ReactDOM.render(
  6. <Pagination defaultCurrent={2} onChange={change} />,
  7. mountNode
  8. );

受控分页

受控分页,是指分页组件的状态由父组件维护,组件自身只负责渲染其父组件传递的值,父组件通过 current 属性传递当前的值。

Pagination 翻页器 - 图2

查看源码在线预览

  1. import { Pagination } from '@alifd/next';
  2. class Demo extends React.Component {
  3. constructor(props) {
  4. super(props);
  5. this.state = {
  6. current: 2
  7. };
  8. this.handleChange = this.handleChange.bind(this);
  9. }
  10. handleChange(current) {
  11. this.setState({
  12. current
  13. });
  14. }
  15. render() {
  16. return (
  17. <Pagination current={this.state.current} onChange={this.handleChange} />
  18. );
  19. }
  20. }
  21. ReactDOM.render(<Demo />, mountNode);

分页尺寸

可以通过指定 size 属性来设置分页的尺寸。

Pagination 翻页器 - 图3

查看源码在线预览

  1. import { Pagination } from '@alifd/next';
  2. ReactDOM.render(
  3. <div>
  4. <h3>small</h3>
  5. <Pagination defaultCurrent={2} size="small" />
  6. <h3>medium</h3>
  7. <Pagination defaultCurrent={2} size="medium" />
  8. <h3>large</h3>
  9. <Pagination defaultCurrent={2} size="large" />
  10. </div>,
  11. mountNode
  12. );

分页类型

可以通过指定 type 属性来设置分页的类型。

Pagination 翻页器 - 图4

查看源码在线预览

  1. import { Pagination } from '@alifd/next';
  2. ReactDOM.render(
  3. <div>
  4. <h3>normal</h3>
  5. <Pagination defaultCurrent={2} />
  6. <h3>simple</h3>
  7. <Pagination defaultCurrent={2} type="simple" />
  8. <h3>mini</h3>
  9. <Pagination defaultCurrent={2} type="mini" />
  10. </div>,
  11. mountNode
  12. );

前进后退按钮只显示箭头

可以通过指定 shape 属性来设置前进后退按钮箭头的显示方式。

Pagination 翻页器 - 图5

查看源码在线预览

  1. import { Pagination } from '@alifd/next';
  2. ReactDOM.render(
  3. <div>
  4. <h3>normal</h3>
  5. <Pagination defaultCurrent={2} />
  6. <h3>arrow-only</h3>
  7. <Pagination defaultCurrent={2} shape="arrow-only" />
  8. <h3>arrow-prev-only</h3>
  9. <Pagination defaultCurrent={2} shape="arrow-prev-only" />
  10. <h3>no-border</h3>
  11. <Pagination defaultCurrent={2} shape="no-border" type="simple" />
  12. </div>,
  13. mountNode
  14. );
  1. .next-pagination + .next-pagination {
  2. margin-top: 20px;
  3. }

每页显示

可以通过设置 pageSize 属性来指定每页显示的数量。可以通过设置 pageSizeSelector 属性来指定是否显示 每页数量选择 的部件以及部件形状。可以通过设置 pageSizeList 属性来指定 每页显示数量 可选的值。可以通过设置 pageSizePosition 属性来指定 每页显示数量选择 的部件显示在整个组件的开始位置还是结束位置。可以通过设置 onPageSizeChange 属性来指定每页显示的数量变化时的回调函数。

Pagination 翻页器 - 图6

查看源码在线预览

  1. import { Pagination } from '@alifd/next';
  2. const handlePageSizeChange = size => console.log(size);
  3. ReactDOM.render(
  4. <div>
  5. <h3>To hidden per page size selector</h3>
  6. <Pagination pageSizeSelector={false} />
  7. <h3>Type per page size selector of is dropdownand as for the tail of the entire component</h3>
  8. <Pagination pageSizeSelector="dropdown" pageSizePosition="end" onPageSizeChange={handlePageSizeChange} />
  9. <h3>Filter type per page size selector, and use floating layout</h3>
  10. <Pagination pageSizeSelector="filter" onPageSizeChange={handlePageSizeChange} useFloatLayout />
  11. </div>,
  12. mountNode
  13. );

显示总数

分页组件默认不显示总数,你可以通过 totalRender 自定义总数的显示结果。

Pagination 翻页器 - 图7

查看源码在线预览

  1. import { Pagination } from '@alifd/next';
  2. const total = 50;
  3. ReactDOM.render(
  4. <Pagination className="custom-pagination" total={total} totalRender={total => `Total: ${total}`} />,
  5. mountNode
  6. );
  1. .custom-pagination {
  2. display: inline-block;
  3. margin-left: 10px;
  4. }

分页按钮链接

可以通过指定 link 属性来设置页码按钮的跳转链接,方便 SEO,link 属性的值为一个包含 {page} 的模板字符串,Pagination 组件会将该占位符替换为具体的页码数字。

Pagination 翻页器 - 图8

查看源码在线预览

  1. import { Pagination } from '@alifd/next';
  2. const format = `${window.location.href}#/{page}`;
  3. ReactDOM.render(
  4. <Pagination defaultCurrent={2} link={format} />,
  5. mountNode
  6. );

配合 react-router 使用

单页应用场景下,Pagination 组件可以使用外部跳转的方法来实现单页内部跳转。

Pagination 翻页器 - 图9

查看源码在线预览

  1. import { Pagination } from '@alifd/next';
  2. import { hashHistory } from 'react-router';
  3. function handleChange(page) {
  4. hashHistory.push(page.toString());
  5. }
  6. ReactDOM.render(
  7. <Pagination defaultCurrent={2} onChange={handleChange} />,
  8. mountNode
  9. );

每页显示

使用popupProps prop中的align属性设置下拉位置。

Pagination 翻页器 - 图10

查看源码在线预览

  1. import { Pagination } from '@alifd/next';
  2. const handlePageSizeChange = size => console.log(size);
  3. const containerStyle = {
  4. height: '300px',
  5. padding: 0,
  6. width: '100%',
  7. };
  8. const boxStyle = {
  9. overflow: 'auto',
  10. position: 'relative',
  11. width: '100%',
  12. height: '200px',
  13. border: '1px solid black'
  14. };
  15. const tempStyle = {
  16. height: '200px',
  17. display: 'flex',
  18. 'justify-content': 'center',
  19. 'align-items': 'center',
  20. };
  21. const parentStyle = {
  22. display: 'flex',
  23. 'justify-content': 'space-between',
  24. };
  25. const popupProps = {
  26. align: 'bl tl'
  27. };
  28. ReactDOM.render(
  29. <div>
  30. <h3>default align - 'tl bl'</h3>
  31. <Pagination pageSizeSelector="dropdown" total='10' pageSizePosition="start" onPageSizeChange={handlePageSizeChange}/>
  32. <h3>custom align - 'bl tl'</h3>
  33. <Pagination pageSizeSelector="dropdown" total='10' pageSizePosition="start" onPageSizeChange={handlePageSizeChange} popupProps={popupProps}/>
  34. <h3>Inside parent with "overlflow: auto"</h3>
  35. <div style={containerStyle}>
  36. <div style={boxStyle}>
  37. <div style={tempStyle}>scroll down to see the example</div>
  38. <div style={parentStyle}>
  39. <div>
  40. <h3>default align - 'tl bl'</h3>
  41. <Pagination pageSizeSelector="dropdown" total='10' pageSizePosition="start" onPageSizeChange={handlePageSizeChange}/>
  42. </div>
  43. <div>
  44. <h3>custom align - 'bl tl'</h3>
  45. <Pagination pageSizeSelector="dropdown" total='10' pageSizePosition="start" onPageSizeChange={handlePageSizeChange} popupProps={popupProps}/>
  46. </div>
  47. </div>
  48. </div>
  49. </div>
  50. </div>,
  51. mountNode
  52. );

相关区块

Pagination 翻页器 - 图11

暂无相关区块