【问题标题】:ReactJS how to display 5 page numbers at a time in paginationReactJS如何在分页中一次显示5个页码
【发布时间】:2018-10-12 07:58:49
【问题描述】:

所以我有这个分页代码,

class Pagination extends Component{

    render() {


        var { meta } = this.props.items2
        var numbers = !meta ? [] : Array.from({length: meta.pagination.total_pages },(v,k)=>k+1)
        console.log("data pagination", meta)
        return (
            <nav aria-label="Page navigation example">
              { !meta ? <span></span>
                : <ul className="pagination justify-content-center">
                            {meta.pagination.links.length === 0 ? <span></span> 
                                      : <li className="page-item">
                                          <button className="page-link" aria-label="Previous">
                                            <span aria-hidden="true">&laquo;</span>
                                            <span className="sr-only">Previous</span>
                                          </button>
                                        </li>
                              }
                            {
                                numbers.map((item) => <li className={meta.pagination.current_page === item ? "page-item active" : "page-item"}><button className="page-link" onClick={() => this.props.pageNumber(item,"num")}>{item}</button></li>) 
                            }
                            {meta.pagination.links.length === 0 ? <span></span> 
                                      : <li className="page-item">
                                          <button className="page-link" aria-label="Next">
                                            <span aria-hidden="true">&raquo;</span>
                                            <span className="sr-only">Next</span>
                                          </button>
                                        </li>
                            }
                    </ul>
              }
            </nav>
            )

    }
}

其中,它显示了api中指示的所有页面。 它看起来像这样:

下一个和上一个按钮还不起作用。并显示所有页面。我怎样才能让它只显示 5 个页面,当点击 nexy 按钮时,接下来的 5 个页面会出现?

编辑:根据@santosh 的回答,我收到一个错误Maximum update depth exceeded. This can happen when a component repeatedly calls setState inside componentWillUpdate or componentDidUpdate. React limits the number of nested updates to prevent infinite loops.

class Pagination extends Component{

    state = {
        startIndex : 0, 
        endIndex : 4
    }

  prevPage = () => {
        this.setState(prevState => ({
            startIndex : prevState.startIndex - 5,
            endIndex : prevState.endIndex - 5
        }));
    }

    nextPage = () => {
        this.setState(prevState => ({
            startIndex : prevState.startIndex + 5,
            endIndex : prevState.endIndex + 5
        }));
    }

    render() {
        var startIndex = this.state.startIndex
        var endIndex = this.state.endIndex
        var { meta } = this.props.items2
        var numbers = !meta ? [] : Array.from({length: meta.pagination.total_pages },(v,k)=>k+1)
        console.log("data pagination", meta)
        return (
            <nav aria-label="Page navigation example">
              { !meta ? <span></span>
                : <ul className="pagination justify-content-center">
                            {meta.pagination.links.length === 0 ? <span></span> 
                                      : <li className="page-item">
                                          <button className="page-link" onClick={
                                                        this.prevPage()
                                                    } aria-label="Previous">
                                            <span aria-hidden="true">&laquo;</span>
                                            <span className="sr-only">Previous</span>
                                          </button>
                                        </li>

                              }
                            {numbers.slice(startIndex, endIndex).map(item => (
                                <li className={meta.pagination.current_page === item ? 'page-item active' : 'page-item'}>
                                <button className="page-link" onClick={() => this.props.pageNumber(item, 'num')}>
                                {item}
                                </button>
                                </li>
                                ))
                                    }
                            {meta.pagination.links.length === 0 ? <span></span> 
                                      : <li className="page-item">
                                          <button className="page-link" onClick={
                                                        this.nextPage()
                                                    } aria-label="Next">
                                            <span aria-hidden="true">&raquo;</span>
                                            <span className="sr-only">Next</span>
                                          </button>
                                        </li>
                            }
                    </ul>
              }
            </nav>
            )

    }
}

这是元数据

我正在从索引文件访问这个分页组件。它被这样称呼

<Pagination 
pageNumber={this.pageNumber}
items2={items2}/>

【问题讨论】:

    标签: arrays reactjs


    【解决方案1】:

    可以通过以下方式完成。

    1) 定义两个状态变量如下。

    state = {..., startIndex : 0, endIndex : 4}
    

    2) 然后用这两个索引对 numbers 数组进行切片。

    {
        numbers.slice(startIndex, endIndex).map(item => (
            <li className={meta.pagination.current_page === item ? 'page-item active' : 'page-item'}>
                <button className="page-link" onClick={() => this.props.pageNumber(item, 'num')}>
                    {item}
                </button>
            </li>
        ));
    }
    

    3) 单击下一个按钮时,应使用 setState

    更新状态值

    上一次点击

    this.setState((prevstate)=>{
        startIndex : prevstate.startIndex - 5,
        endIndex : prevstate.endIndex - 5
    })
    

    下一步点击

    this.setState((prevstate)=>{
        startIndex : prevstate.startIndex + 5,
        endIndex : prevstate.endIndex + 5
    })
    

    可以根据需要添加检查数组限制的附加条件。 希望对您有所帮助:)

    代码与 onClick 绑定存在问题。

    onClick={this.prevPage()}
    onClick={this.nextPage()}
    

    应该是

    onClick={this.prevPage}
    onClick={this.nextPage}
    

    请找到工作的codepen:https://codepen.io/imsontosh/pen/zmdGdj?editors=0010

    【讨论】:

    • Maximum update depth exceeded. This can happen when a component repeatedly calls setState inside componentWillUpdate or componentDidUpdate. React limits the number of nested updates to prevent infinite loops.
    • 请提供更多信息,例如this.props.meta,你是如何渲染组件的?
    • 这个解决方案很棒!!
    • 如果你的页数不是 5 的倍数怎么办?
    猜你喜欢
    • 2020-05-27
    • 2013-04-06
    • 1970-01-01
    • 1970-01-01
    • 2013-09-06
    • 1970-01-01
    • 1970-01-01
    • 2019-11-22
    • 1970-01-01
    相关资源
    最近更新 更多