Pagination 在Reactjs中构建分页

Pagination 在Reactjs中构建分页,pagination,reactjs,Pagination,Reactjs,因此,我在Reactjs中构建分页的方式有点奇怪,但它对我来说是有效的,我,怎么会想说第5页上的第一个5 1-5 show me 5-max。但我不清楚如何做到这一点 这就是我目前拥有的: render: function() { // Do we have more then one page? if (this.props.maxPages > 0){ // We have to add one to the max pages that come b

因此,我在Reactjs中构建分页的方式有点奇怪,但它对我来说是有效的,我,怎么会想说第5页上的第一个5 1-5 show me 5-max。但我不清楚如何做到这一点

这就是我目前拥有的:

  render: function() {
    // Do we have more then one page?
    if (this.props.maxPages > 0){

      // We have to add one to the max pages that come back.
      var pageLink = this.props.maxPages + 1;
      var currentPage = this.props.currentPage;
      var liElements = []

      // Build [<<][<] for the user.
      if (pageLink > 1) {
        liElements.push(<li><a href="#posts?page=1">&#60;&#60;</a></li>);
        liElements.push(<li><a href={this.pageSubtraction(currentPage, pageLink)}>&#60;</a></li>);
      }

      // Build the individual [x][y][z] links.
      for (var i = 1; i <= pageLink; i++) {
        liElements.push(<li key={i} id={i}><a href={"#posts?page="+i}>{i}</a></li>);
      }

      // Build the [>][>>] for the user.
      if (pageLink > 1) {
        liElements.push(<li><a href={this.pageAddition(currentPage, pageLink)}>&#62;</a></li>);
        liElements.push(<li><a href={"#posts?page="+pageLink}>&#62;&#62;</a></li>);
      }

      return (<ul className="pagination">{liElements}</ul>);
    }else{
      // Return nothing.
      return ( <div></div> );
    }
  }
这将建立我[]这是伟大的,但他们是没有限制的

此时:

pageLink=6最大页数-我知道变量名 currentPage=1您当前所在的页面 所以我需要的是:


[]选择第5页[],但我不确定当前设置是否允许我这样做。

这是一个有点复杂的算法,并没有提供所有详细信息。与其在这里担心标记,不如从表示应该绘制的内容的纯数据结构开始

Pagination = function(props){
  var pages = props.maxPages + 1;
  var current = props.currentPage;
  var links = [];

  // leading arrows
  if (current > 0) {
    links.push([0, "<<"]);
    links.push([current - 1, "<"]);
  }

  for (var i=current-3; i<current+4; i++) {
    if (i > 0 && i < pages) {
      links.push([i, i]);
    }
  }

  // tailing arrows
  if (current < pages) {
    links.push([current + 1, ">"]);
    links.push([pages - 1, ">>"]);
  }

  return JSON.stringify(links, null, 4);
};
现在我们得到了这样的东西。您还可以轻松编写单元测试,以确保得到正确的结果

[
    [
        0,
        "<<"
    ],
    [
        1,
        "<"
    ],
    [
        1,
        1
    ],
    [
        2,
        2
    ],
    [
        3,
        3
    ],
    [
        4,
        4
    ],
    [
        5,
        5
    ],
    [
        3,
        ">"
    ],
    [
        7,
        ">>"
    ]
]
一旦在这里获得了正确的数据,就可以通过表示函数映射这些数据

function PageLink(i, char){
  character = character || String(i);
  return (
    <li key={char}>
      <a href={"#posts?page="+i}>{char}</a>
    </li>
  );
}

Pagination = function(props){
  /* same code as before */

  return links.map(function(x){
      return PageLink(x[0], x[1]);
  });;
};

另外,当你的答案符合你的要求时,请在这里发布一个答案,以便其他人可以使用它作为他们分页的基础

这是一个有点复杂的算法,并没有提供所有细节。与其在这里担心标记,不如从表示应该绘制的内容的纯数据结构开始

Pagination = function(props){
  var pages = props.maxPages + 1;
  var current = props.currentPage;
  var links = [];

  // leading arrows
  if (current > 0) {
    links.push([0, "<<"]);
    links.push([current - 1, "<"]);
  }

  for (var i=current-3; i<current+4; i++) {
    if (i > 0 && i < pages) {
      links.push([i, i]);
    }
  }

  // tailing arrows
  if (current < pages) {
    links.push([current + 1, ">"]);
    links.push([pages - 1, ">>"]);
  }

  return JSON.stringify(links, null, 4);
};
现在我们得到了这样的东西。您还可以轻松编写单元测试,以确保得到正确的结果

[
    [
        0,
        "<<"
    ],
    [
        1,
        "<"
    ],
    [
        1,
        1
    ],
    [
        2,
        2
    ],
    [
        3,
        3
    ],
    [
        4,
        4
    ],
    [
        5,
        5
    ],
    [
        3,
        ">"
    ],
    [
        7,
        ">>"
    ]
]
一旦在这里获得了正确的数据,就可以通过表示函数映射这些数据

function PageLink(i, char){
  character = character || String(i);
  return (
    <li key={char}>
      <a href={"#posts?page="+i}>{char}</a>
    </li>
  );
}

Pagination = function(props){
  /* same code as before */

  return links.map(function(x){
      return PageLink(x[0], x[1]);
  });;
};

另外,当你的答案符合你的要求时,请在这里发布一个答案,以便其他人可以使用它作为他们分页的基础

下面是创建分页选项的完整代码。全文可用


下面是创建分页选项的完整代码。全文可用