当前位置:首页 > JavaScript > 正文内容

React Ant框架中分页的快速使用

flowstone5年前 (2021-01-01)JavaScript712

使用环境

  • React

  • Ant Design

  • SpringBoot

  • Spring Data JPA

前端页面

首先,我们要查看Ant官方文档,一般涉及到分页的页面都是列表查询,在表格组件中找到API,可以从API中看到使用方法,查看文档后,编写代码如下


<Pagination
    //默认当前页是接口返回的当前页
    defaultCurrent={responseParam.pageNum}
    //每页条数 取得是接口返回的每页条数
    pageSize={responseParam.pageSize}
    //总条数  取得是接口返回的总条数
    total={responseParam.count}
    //指定每页可以显示多少条 
    pageSizeOptions={["2","4","6"]}
    //是否展示 pageSize 切换器
    showSizeChanger
    /**页码改变的回调,参数是改变后的页码及每页条数
        * @param page 改变后页码
        * @param pageSize 每页条数
        */
    onChange={(page: any, pageSize: any) => {
        console.log('page = ', page, pageSize);
        setRequestParam(param => ({
            ...param,
            //修改页码
            pageNum: page,
            //修改每页条数
            pageSize: pageSize
    }));
}}/>


requestParam定义格式如下:

const [requestParam, setRequestParam] = useState({
    //给页码默认值
    pageNum: 1,
    //每页条数默认值
    pageSize: 10
});


当每次我们修改requestParam的值时,就会重新调用接口渲染页面,如下所示:

useEffect(() => {    
    //调用查询接口
    loadData();
    
  }, [requestParam]);


后端接口

接口的请求参数,主要包含pageNum和pageSize,如下所示:

@GetMapping("/list/{pageNum}/{pageSize}")
public R list(@PathVariable("pageNum") Integer pageNum,
              @PathVariable("pageSize") Integer pageSize) {
    return smsTemplateService.list(PageRequest.of(pageNum-1, pageSize));
}


PageRequest.of()静态方法会返回一个PageRequest对象,为什么pageNum-1?查看源码如下:

/**
 * Creates a new unsorted {@link PageRequest}.
 *
 * @param page zero-based page index, must not be negative.
 * @param size the size of the page to be returned, must be greater than 0.
 * @since 2.0
 */public static PageRequest of(int page, int size) {	
     return of(page, size, Sort.unsorted());
}


从上述静态方法中,可以得知,pageNum是从0开始计算,故pageNum-1,下面是接口具体实现

/**
* @param pageable  此处pageable为接口定义,前面PageRequest是它的一种实现
*/@Overridepublic R list(Pageable pageable) {
    Page<SmsTemplate> smsTemplates =  smsTemplateRepository.findAll(pageable);
    
    List<SmsTemplateVo> smsTemplateVos = smsTemplates.getContent().stream().map(smsTemplate -> {
        SmsTemplateVo smsTemplateVo = new SmsTemplateVo();
        BeanUtils.copyProperties(smsTemplate, smsTemplateVo);        
        return smsTemplateVo;
    }).collect(Collectors.toList());    
    return R.ofSuccess("查询成功", new PageResult<>(smsTemplateVos, smsTemplates));
}


接口返回的结果的示例,如下所示

{
    "code":200,
    "message":"查询成功",
    "data":{
        "pageNum":1,
        "pageSize":2,
        "count":6,
        "result":[
            {
            "id":2,
            "sendAccount":"13130000000",
            "smsSign":"方方[已审核]",
            "type":1,
            "content":"你的短信验证码是123456,请勿将验证码泄露给他人。",
            "reason":"测试111",
            "notice":1,
            "createTime":"2021-01-15 14:02:55",
            "updateTime":"2021-01-15 14:02:55",
            "creator":"xiaoming",
            "updater":null
            }
        ]
    }
}


扫描二维码推送至手机访问。

版权声明:本文由薛尧的博客发布,如需转载请注明出处。

本文链接:https://flowstone.sourceforge.io/?id=58

分享给朋友:

相关文章

React中useState如何给对象中的某一个属性赋值

问题描述在React文件中使用了useState,定义了查询条件,这个查询条件实际上是一个对象,如下所示const [requestParam, setRequestParam] = useState...

JS中绑定方法加括号和不加括号的区别

问题描述在React开发中,遇到一个页面不停调用接口问题,如下图所示 问题解决查找哪里调用了接口,最后在刷新按钮上找到了问题所在,如下所示<Button     type="...

React中如何实现文件上传功能

场景描述在前端页面中,经常会使用到文件上传功能,我们如何实现上传功能呢?开发环境React ^16.12.0Ant Design ^5.0.12SpringBoot 2.3.0页面实现文件上传首先我们要用到Ant框架中自带的上传组件Uplo...

React中如何实现文件下载功能

场景描述在前端页面中,经常会使用到文件下载功能,我们如何实现下载功能呢?开发环境React ^16.12.0Ant Design ^5.0.12SpringBoot 2.3.0问题分析首先,想到下载,肯定要涉及文件流(字节流),后端接口返回...

Ant Design中使用Upload上传组件如何自定义文件列表展示位置

软件环境macOS Big Sur 11.1React 16.12.0Ant Design 4.10.0实际效果现有一个需求,是上传文件,点击浏览文件按钮,选中文件后,在按钮的上方显示,上传的文件列表,如下图所示 当前效果目前使用...