分页组件未在 UI 上呈现 - React

悉达多辛哈

我正在尝试使用本指南在我的 React 应用程序中实现分页 我按照指南中的说明创建了 Pagination.js 文件,但我无法在我的 UI 上看到它,这是应用程序的屏幕截图在此处输入图片说明

这是我正在实施分页的搜索结果页面,基本上这将显示根据用户输入的关键字从服务器获取的结果,因此我想显示为分页结果。我上面截图对应的js文件是:

import React from 'react';
import NavigationBar from './NavigationBar';
import SearchPageResultsStyle from "../assets/css/SearchResultsPage.css"
import Pagination from './Pagination';

class SearchResultsPage  extends React.Component{
    constructor(props) {
        super(props);
        console.log("Printing in the results component: this.props.location.state.data.keyword")
        console.log(this.props.location.state.data.keyword)
        this.state = {
            results: this.props.location.state.data.results,
            keyword: this.props.location.state.data.keyword,
            pageOfItems: []
        };
        this.onChangePage = this.onChangePage.bind(this);
    }

    onChangePage(pageOfItems) {
        // update local state with new page of items
        this.setState({pageOfItems});
    }
    render() {
        return(
            <div>
                <NavigationBar/>
                <h4 style={{textAlign:'center', color:'#1a0dab'}}>Showing search results for <span style={{fontWeight:'bold', fontStyle:'Italic'}}>'{this.state.keyword}'</span></h4>
                <hr/>
                <div className={'wrap'} style={SearchPageResultsStyle}>
                    <div className={'fleft'}>left column</div>
                    <div className={'fcenter'}>
                        <h3 style={{color:'#1a0dab'}}>Tweeter tweets text will be displayed here!!!</h3>
                        <a href={'https://google.com'}>Tweet urls will be displayed here</a>
                        <br/>
                        <div style={{display:'inline'}}>
                            <p><span style={{fontWeight:'bold', textColor:'#6a6a6a'}}>topic: </span>crime</p>
                            <p><span style={{fontWeight:'bold', textColor:'#6a6a6a'}}>city: </span>delhi</p>
                            <p><span style={{fontWeight:'bold', textColor:'#6a6a6a'}}>lang: </span>Hindi</p>
                            <p><span style={{fontWeight:'bold', textColor:'#6a6a6a'}}>Hashtags: </span></p>
                            <hr/>
                            <Pagination items={this.state.results} onChangePage={this.onChangePage}/>
                        </div>
                    </div>
                    <div className={'fright'}>right column</div>
                </div>
            </div>


        )
    }

}

export default SearchResultsPage;

我的 pagination.js 文件

import React from 'react';
import PropTypes from 'prop-types';

const propTypes = {
    items: PropTypes.array.isRequired,
    onChangePage: PropTypes.func.isRequired,
    initialPage: PropTypes.number,
    pageSize: PropTypes.number
};

const defaultProps = {
    initialPage: 1,
    pageSize: 10
};

class Pagination extends React.Component{
    constructor(props){
        super(props);
        this.state = {
            pager: {}
        };

        // set page if items array isn't empty
        if (this.props.items && this.props.items.length) {
            this.setPage(this.props.initialPage);
        }
    }

    componentDidUpdate(prevProps, prevState) {
        // reset page if items array has changed
        if (this.props.items !== prevProps.items) {
            this.setPage(this.props.initialPage);
        }
    }

    setPage(page) {
        var { items, pageSize } = this.props;
        var pager = this.state.pager;
        
        if (page < 1 || page > pager.totalPages) {
            return;
        }

        // get new pager object for specified page
        pager = this.getPager(items.length, page, pageSize);

        // get new page of items from items array
        var pageOfItems = items.slice(pager.startIndex, pager.endIndex + 1);

        // update state
        this.setState({ pager: pager });

        // call change page function in parent component
        this.props.onChangePage(pageOfItems);
    }

    getPager(totalItems, currentPage, pageSize) {
        // default to first page
        currentPage = currentPage || 1;

        // default page size is 10
        pageSize = pageSize || 10;

        // calculate total pages
        var totalPages = Math.ceil(totalItems / pageSize);

        var startPage, endPage;
        if (totalPages <= 10) {
            // less than 10 total pages so show all
            startPage = 1;
            endPage = totalPages;
        } else {
            // more than 10 total pages so calculate start and end pages
            if (currentPage <= 6) {
                startPage = 1;
                endPage = 10;
            } else if (currentPage + 4 >= totalPages) {
                startPage = totalPages - 9;
                endPage = totalPages;
            } else {
                startPage = currentPage - 5;
                endPage = currentPage + 4;
            }
        }

        // calculate start and end item indexes
        var startIndex = (currentPage - 1) * pageSize;
        var endIndex = Math.min(startIndex + pageSize - 1, totalItems - 1);

        // create an array of pages to ng-repeat in the pager control
        var pages = [...Array((endPage + 1) - startPage).keys()].map(i => startPage + i);

        // return object with all pager properties required by the view
        return {
            totalItems: totalItems,
            currentPage: currentPage,
            pageSize: pageSize,
            totalPages: totalPages,
            startPage: startPage,
            endPage: endPage,
            startIndex: startIndex,
            endIndex: endIndex,
            pages: pages
        };
    }

    render() {
        var pager = this.state.pager;

        if (!pager.pages || pager.pages.length <= 1) {
            // don't display pager if there is only 1 page
            return null;
        }

        return (
            <div>
                <ul className="pagination">
                    <li className={pager.currentPage === 1 ? 'disabled' : ''}>
                        <button onClick={() => this.setPage(1)}>First</button>
                    </li>
                    <li className={pager.currentPage === 1 ? 'disabled' : ''}>
                        <button onClick={() => this.setPage(pager.currentPage - 1)}>Previous</button>
                    </li>
                    {pager.pages.map((page, index) =>
                        <li key={index} className={pager.currentPage === page ? 'active' : ''}>
                            <button onClick={() => this.setPage(page)}>{page}</button>
                        </li>
                    )}
                    <li className={pager.currentPage === pager.totalPages ? 'disabled' : ''}>
                        <button onClick={() => this.setPage(pager.currentPage + 1)}>Next</button>
                    </li>
                    <li className={pager.currentPage === pager.totalPages ? 'disabled' : ''}>
                        <button onClick={() => this.setPage(pager.totalPages)}>Last</button>
                    </li>
                </ul>
            </div>
        );
    }
}

Pagination.propTypes = propTypes;
Pagination.defaultProps = defaultProps;
export default Pagination;
我不明白为什么我的 Pagination.js 文件中的项目列表没有被呈现。任何人都可以指出我缺少的究竟是什么?

悉达多辛哈

这就是我实现上述库的方式,它真的很酷。我必须向它添加 css,以使其看起来不错。它现在对我有用。

import React from 'react';
import NavigationBar from './NavigationBar';
import SearchPageResultsStyle from "../assets/css/SearchResultsPage.css"
import Pagination from './Pagination';

class SearchResultsPage  extends React.Component{
    constructor(props) {
        super(props);
        console.log("Printing in the results component: this.props.location.state.data.results")
        console.log(this.props.location.state.data.results)
        this.state = {
            results: this.props.location.state.data.results,
            keyword: this.props.location.state.data.keyword,
            pageOfItems: []
        };
        this.onChangePage = this.onChangePage.bind(this);
    }

    onChangePage(pageOfItems) {
        // update local state with new page of items
        this.setState({pageOfItems});
    }
    render() {

        const renderItems = this.state.pageOfItems.map((item, index) => {
            return (
                <div>
                    <h3 style={{color: '#1a0dab'}} key={index}>{item.text}</h3>
                    <a href={'https://google.com'} key={index}>{item.tweetUrl}</a>
                    <br/>
                    <p><span style={{fontWeight:'bold', textColor:'#6a6a6a'}} key={index}>topic: </span>{item.topic}</p>
                    <p><span style={{fontWeight:'bold', textColor:'#6a6a6a'}} key={index}>city: </span>{item.city}</p>
                    <p><span style={{fontWeight:'bold', textColor:'#6a6a6a'}} key={index}>lang: </span>{item.lang}</p>
                    <p><span style={{fontWeight:'bold', textColor:'#6a6a6a'}} key={index}>Hashtags: </span></p>
                    <hr/>
                </div>
            )
        })
        return (
            <div>
                <NavigationBar/>
                <h4 style={{textAlign:'center', color:'#1a0dab'}}>Showing search results for <span style={{fontWeight:'bold', fontStyle:'Italic'}}>'{this.state.keyword}'</span></h4>
                <hr/>
                <div className={'wrap'} style={SearchPageResultsStyle}>
                    <div className={'fleft'}>left column</div>
                    <div className={'fcenter'}>
                        {renderItems}
                        <Pagination items={this.state.results} onChangePage={this.onChangePage}/>
                    </div>
                </div>
                <div className={'fright'}></div>
            </div>
        )
    }

}

export default SearchResultsPage;

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

未在路由上呈现的 React 组件已更改

来自分类Dev

材料UI自动完成未在React应用程序的远程数据源上呈现

来自分类Dev

jQuery Range-Slider组件未在UI中呈现

来自分类Dev

React JS视图未在setState()上重新呈现

来自分类Dev

ReportViewer组件未在IIS 8上呈现

来自分类Dev

React组件道具未在Next.js页面内呈现

来自分类Dev

React Hooks:组件未在嵌套路由中呈现

来自分类Dev

引导进度栏未在react组件内部呈现

来自分类Dev

React:子组件未在父状态更改时呈现

来自分类Dev

React-动态呈现的语义UI下拉组件的慢状态设置

来自分类Dev

React组件未在history.push上重新加载

来自分类Dev

React-Router组件未在<Link>导航上更新

来自分类Dev

React Navigation:组件未在弹出或后退按钮上卸载 #5775

来自分类Dev

React Router 不会在子组件的路由上呈现新组件

来自分类Dev

UI视图未在AngularJS教程中呈现

来自分类Dev

Facebook React.js:如何在服务器上呈现状态组件?

来自分类Dev

在React.JS中,如何在呈现字段的组件上设置readOnly属性

来自分类Dev

React:组件仅在按钮的第二onClick上呈现新值

来自分类Dev

为什么我跟踪状态历史的 React 组件没有在视觉上呈现?

来自分类Dev

React组件将状态变量作为参数,未在更新时呈现

来自分类Dev

React 组件不呈现内容

来自分类Dev

REACT - 呈现组件时出错

来自分类Dev

React js 组件未呈现

来自分类Dev

组件未在reactJS中呈现

来自分类Dev

“ UI小猫”选择组件未呈现值

来自分类Dev

RichFaces嵌套表单Ajax组件UI呈现

来自分类Dev

AngularJS-分页未在$ scope上呈现。观看更改(包括CodePen)

来自分类Dev

ListView行未在React Native中呈现

来自分类Dev

功能组件上的React-Redux + Redux-Thunk。从API提取数据后更新UI

Related 相关文章

  1. 1

    未在路由上呈现的 React 组件已更改

  2. 2

    材料UI自动完成未在React应用程序的远程数据源上呈现

  3. 3

    jQuery Range-Slider组件未在UI中呈现

  4. 4

    React JS视图未在setState()上重新呈现

  5. 5

    ReportViewer组件未在IIS 8上呈现

  6. 6

    React组件道具未在Next.js页面内呈现

  7. 7

    React Hooks:组件未在嵌套路由中呈现

  8. 8

    引导进度栏未在react组件内部呈现

  9. 9

    React:子组件未在父状态更改时呈现

  10. 10

    React-动态呈现的语义UI下拉组件的慢状态设置

  11. 11

    React组件未在history.push上重新加载

  12. 12

    React-Router组件未在<Link>导航上更新

  13. 13

    React Navigation:组件未在弹出或后退按钮上卸载 #5775

  14. 14

    React Router 不会在子组件的路由上呈现新组件

  15. 15

    UI视图未在AngularJS教程中呈现

  16. 16

    Facebook React.js:如何在服务器上呈现状态组件?

  17. 17

    在React.JS中,如何在呈现字段的组件上设置readOnly属性

  18. 18

    React:组件仅在按钮的第二onClick上呈现新值

  19. 19

    为什么我跟踪状态历史的 React 组件没有在视觉上呈现?

  20. 20

    React组件将状态变量作为参数,未在更新时呈现

  21. 21

    React 组件不呈现内容

  22. 22

    REACT - 呈现组件时出错

  23. 23

    React js 组件未呈现

  24. 24

    组件未在reactJS中呈现

  25. 25

    “ UI小猫”选择组件未呈现值

  26. 26

    RichFaces嵌套表单Ajax组件UI呈现

  27. 27

    AngularJS-分页未在$ scope上呈现。观看更改(包括CodePen)

  28. 28

    ListView行未在React Native中呈现

  29. 29

    功能组件上的React-Redux + Redux-Thunk。从API提取数据后更新UI

热门标签

归档