反应表动态页面大小,但有大小限制和分页

Posted

技术标签:

【中文标题】反应表动态页面大小,但有大小限制和分页【英文标题】:React table dynamic page size but with size limit and pagination 【发布时间】:2019-05-01 01:21:21 【问题描述】:

我正在使用 React Table,我需要根据数据的长度动态设置表格行。这就是我得到的:

let pgSize = (data.length > 10) ? 5 : data.length;


<ReactTable
    data=data 
    PaginationComponent=Pagination
    columns=[
        
            columns: [
            //column defs
            ]
        
    ]
    defaultPageSize=10
    pageSize=pgSize
    className="-striped -highlight"
/>

我需要动态的行,但如果我将页面大小设置为数据的长度。分页被删除,如果我有 100 行数据,这将是一个问题。我最多需要 10 个作为默认页面大小。我似乎无法理解这样做的逻辑。

感谢您的帮助!

【问题讨论】:

所以你希望它在你的数据少于 defaultPageSize 时缩小页面大小,这样你就没有空行了? 嗨@Nathan,是的,但是如果它大于10,那么我需要分页, 【参考方案1】:

Nathan 的回答工作得很好,但没有必要动态计算 pageSize 来解决这个问题。更简单的方法是在 react-table 组件上定义 minRows 属性。默认情况下它是未定义的,react-table 将根据需要添加尽可能多的空填充行来填充您的页面。定义它会限制创建的填充行的数量,因此您可以将其设置为 0 或 1 以实现您所追求的目标,具体取决于您是否希望在没有要显示的行时呈现填充行。

<ReactTable minRows=1 columns=columns data=data />

【讨论】:

简单有效。谢谢。【参考方案2】:

查看React-Table's sample table。

我稍微修改了他们的代码以使其适合您的情况。将此代码复制并粘贴到他们的编辑器中以查看输出。

在构造函数中,您可以将makeData(20) 更改为您想要的任何数据量。

请注意,我完全删除了 defaultPageSize 并通过您的三元运算符处理它。您的表将增长到 10(默认大小),但在 11 时,会缩小到只有 5 行。

import React from "react";
import  render  from "react-dom";
import  makeData, Logo, Tips  from "./Utils";

// Import React Table
import ReactTable from "react-table";
import "react-table/react-table.css";

class App extends React.Component 
  constructor() 
    super();
    this.state = 
      data: makeData(20)
    ;
  

  render() 
    const  data  = this.state;
    return (
      <div>
        <ReactTable
          data=data
          pageSize=(data.length > 10) ? 10 : data.length
          columns=[
            
              Header: "Name",
              columns: [
                
                  Header: "First Name",
                  accessor: "firstName"
                ,
                
                  Header: "Last Name",
                  id: "lastName",
                  accessor: d => d.lastName
                
              ]
            ,
            
              Header: "Info",
              columns: [
                
                  Header: "Age",
                  accessor: "age"
                ,
                
                  Header: "Status",
                  accessor: "status"
                
              ]
            ,
            
              Header: 'Stats',
              columns: [
                
                  Header: "Visits",
                  accessor: "visits"
                
              ]
            
          ]
          className="-striped -highlight"
        />
        <br />
        <Tips />
        <Logo />
      </div>
    );
  


render(<App />, document.getElementById("root"));

【讨论】:

哦,我明白了。谢谢!但我尝试将数据设为 25,它给我留下了 3 页,最后一页有 5 个空行。 啊,为了做到这一点,您必须将点击处理程序添加到行按钮并跟踪您所在的页面并使用pgSize=(currentPage*defaultPageSize) &lt; defaultPageSize : data.length - currentPage*defaultPageSize : defaultPageSize 之类的东西。如果不从 pageJump 输入框中获取当前页面,我看不到从 React-Table 获取当前页面的方法。【参考方案3】:

为了在初始渲染后更新 ReactTable 页面大小,请使用 pageSize 属性:

<ReactTable 
  minRows=0
  data=data 
  defaultPageSize=initialSize
  pageSize=updatedSize
/>

【讨论】:

以上是关于反应表动态页面大小,但有大小限制和分页的主要内容,如果未能解决你的问题,请参考以下文章

如何在 reactjs 中动态更改字体大小和字体粗细?

使用PropSheetLook_OneNoteTabs样式动态调整CMFCPropertySheet的大小

前端-根据页面大小动态计算字体大小

H5页面中字体大小动态配置

WIA:设置动态页面大小

每页动态限制 Knp 分页