【问题标题】:react-bootstrap-table - own number of pagination itemsreact-bootstrap-table - 自己的分页项目数
【发布时间】:2018-08-16 09:10:25
【问题描述】:

我正在使用 react-bootstrap-table 中的 BootstrapTable 并从外部 API 获取数据。每次我得到一个 30 个项目的对象。因此 pageSize 为 30,但我从 API 获得了 totalPages 变量,假设为 6。不幸的是,表格数据每次都是 30,所以只有一页

我想告诉表格我想要多少页 - 6 - 每次在分页项中 onClick 我都会调用另一个 API 链接。我怎样才能做到这一点?

  onPageChange = page => {
    alert(`Let's go to page: ${page}`);
  };

  render() {
    const options = {
      onPageChange: this.onPageChange,
      hideSizePerPage: true,
      page: 1,
      sizePerPage: this.props.pageSize,
      paginationSize: 6,
    };
    return (
      <Card>
        <CardHeader>
          <h1> Sales report</h1>
        </CardHeader>
        <CardBody>
          <BootstrapTable
            data={this.props.sales}
            version="4"
            striped
            hover
            pagination
            options={options}
            keyField="Type"
          >
            {tableHeaders.map((header, index) => (
              <TableHeaderColumn key={index} dataField={header}>
                {header}
              </TableHeaderColumn>
            ))}
          </BootstrapTable>
        </CardBody>
      </Card>
    );
  }

【问题讨论】:

    标签: javascript reactjs react-bootstrap-table


    【解决方案1】:

    您必须传递options 对象并通过单击每个页面指定确切的项目数和回调。

    例如:

    class PaginationHookTable extends React.Component {
      constructor(props) {
        super(props);
    
        this.options = {
          onPageChange: this.onPageChange,
          sizePerPage: 6,
        };
    
        this.state = {
            data: [],
        }
      }
    
      onPageChange = (page, sizePerPage) => {
        alert(`page: ${page}, sizePerPage: ${sizePerPage}`);
    
        // make another url
        const url = `http://someurl.com/api/endpoint?page=${page}`;
    
        // make request and update state with new data
        // axios just for example
        axios.get(url).then(resp => this.setState({ data: resp });
      }
    
      render() {
        return (
          <div>
            <BootstrapTable
              data={this.state.data}
              options={this.options}
              remote={true}
    
              // you need to use your number of total from backend
              // instead of 100 ofc
              fetchInfo={{ dataTotalSize: 100 }}
              pagination>
              <TableHeaderColumn dataField='id'>Product ID</TableHeaderColumn>
              <TableHeaderColumn dataField='name'>Product Name</TableHeaderColumn>
              <TableHeaderColumn dataField='price'>Product Price</TableHeaderColumn>
            </BootstrapTable>
          </div>
        );
      }
    }
    

    更新:您必须传递额外的道具:remote={true}fetchInfo: { dataTotalSize: 100 } 以指定项目总数。

    查看更多here

    【讨论】:

    • 我看到了这个例子并使用了这个代码的一部分,以及 onPageChange ,但它不能解决我的问题(或者我不明白你的意思)。问题是数据是30 个项目,页面大小也是 30 个项目,但我想要这个分页,因为我将从 API 获得另一个 30-items-data 页面更改。所以第 1 页 -API1,第 2 页 -API2 等。使用您的代码,我认为仍然会有 1 个分页项,因为表认为只需要 1 个
    • 我编辑了答案 - 添加了代码。所以基本上 react-bootstrap-table 并不关心 paginationSize: 6,因为数据是 30items 而 pageSize 也是 30items
    • @jake-ferguson 你在使用react-bootstrap-table 的第一个版本吗?
    • 您不需要使用paginationSize - 它仅用于显示栏目的。我已经更新了如何调用另一个 api url 的答案。要指定每页应该有多少项目,请使用sizePerPage。另外,请确保您在 sizePerPage: this.props.pageSize 处传递了正确的值作为道具。我已经为你创建了代码框 - 看看 - click here.
    • 在这个沙箱中发生的情况与我的示例相同 - 如果我们将 sizePerPage 更改为 2,则页面上只有一个 - 分页中的一项
    猜你喜欢
    • 1970-01-01
    • 2020-01-02
    • 1970-01-01
    • 2018-11-21
    • 1970-01-01
    • 2021-09-26
    • 2016-06-28
    • 2021-10-23
    • 2020-08-03
    相关资源
    最近更新 更多