【问题标题】:Making a pagination in ReactJS在 ReactJS 中进行分页
【发布时间】:2019-07-05 10:40:31
【问题描述】:

我从另一个线程 (how to implement Pagination in reactJs) 获得了这段代码:

  constructor() {
    super();
    this.state = {
      todos: ['a','b','c','d','e','f','g','h','i','j','k'],
      currentPage: 1,
      todosPerPage: 3
    };
    this.handleClick = this.handleClick.bind(this);
  }

  handleClick(event) {
    this.setState({
      currentPage: Number(event.target.id)
    });
  }

  render() {
    const { todos, currentPage, todosPerPage } = this.state;

    // Logic for displaying todos
    const indexOfLastTodo = currentPage * todosPerPage;
    const indexOfFirstTodo = indexOfLastTodo - todosPerPage;
    const currentTodos = todos.slice(indexOfFirstTodo, indexOfLastTodo);

    const renderTodos = currentTodos.map((todo, index) => {
      return <li key={index}>{todo}</li>;
    });

    // Logic for displaying page numbers
    const pageNumbers = [];
    for (let i = 1; i <= Math.ceil(todos.length / todosPerPage); i++) {
      pageNumbers.push(i);
    }

    const renderPageNumbers = pageNumbers.map(number => {
      return (
        <li
          key={number}
          id={number}
          onClick={this.handleClick}
        >
          {number}
        </li>
      );
    });

    return (
      <div>
        <ul>
          {renderTodos}
        </ul>
        <ul id="page-numbers">
          {renderPageNumbers}
        </ul>
      </div>
    );
  }
}


ReactDOM.render(
  <TodoApp />,
  document.getElementById('app')
);

分页工作正常,但“todos”是一个字符串数组,而我的数据是一个 js 文件中的对象数组,如下所示:

const vehiclesData = [
    {
        id: 1,
        brand: "BMW",
        model: "X5",
    },
    {
        id: 2,
        brand: "Audi",
        model: "RS6",
    },
    {
        id: 3,
        brand: "Ford",
        model: "Shelby GT350",
    },
    {
        id: 4,
        brand: "Volkswagen",
        model: "Golf VI",
    },
    {
        id: 5,
        brand: "Chevrolet",
        model: "Camaro",
    }
]

export default vehiclesData;

我自己一直在尝试这样做,但没有运气。我刚开始教自己做出反应。如何编辑代码以包含我的数据?任何帮助将不胜感激。

【问题讨论】:

    标签: javascript reactjs pagination


    【解决方案1】:

    你的代码应该是这样的

    
    const vehiclesData = [
        {
            id: 1,
            brand: "BMW",
            model: "X5",
        },
        {
            id: 2,
            brand: "Audi",
            model: "RS6",
        },
        {
            id: 3,
            brand: "Ford",
            model: "Shelby GT350",
        },
        {
            id: 4,
            brand: "Volkswagen",
            model: "Golf VI",
        },
        {
            id: 5,
            brand: "Chevrolet",
            model: "Camaro",
        }
    ]
        class TodoApp extends React.Component {
          constructor() {
            super();
            this.state = {
              vehiclesData,
              currentPage: 1,
              todosPerPage: 3
            };
            this.handleClick = this.handleClick.bind(this);
          }
    
          handleClick(event) {
            this.setState({
              currentPage: Number(event.target.id)
            });
          }
    
          render() {
            const { vehiclesData, currentPage, todosPerPage } = this.state;
    
            // Logic for displaying current todos
            const indexOfLastTodo = currentPage * todosPerPage;
            const indexOfFirstTodo = indexOfLastTodo - todosPerPage;
            const currentTodos = vehiclesData.slice(indexOfFirstTodo, indexOfLastTodo);
    
            const renderTodos = currentTodos.map((vd, index) => {
              return <li key={index}>{vd.brand} {vd.model}</li>;
            });
    
            // Logic for displaying page numbers
            const pageNumbers = [];
            for (let i = 1; i <= Math.ceil(vehiclesData.length / todosPerPage); i++) {
              pageNumbers.push(i);
            }
    
            const renderPageNumbers = pageNumbers.map(number => {
              return (
                <li
                  key={number}
                  id={number}
                  onClick={this.handleClick}
                >
                  {number}
                </li>
              );
            });
    
            return (
              <div>
                <ul>
                  {renderTodos}
                </ul>
                <ul id="page-numbers">
                  {renderPageNumbers}
                </ul>
              </div>
            );
          }
        }
    
    
        ReactDOM.render(
          <TodoApp />,
          document.getElementById('app')
        );
    

    这是modified version

    【讨论】:

      【解决方案2】:

      现在应该可以呈现您想要的任何列表。在您的情况下,您有一组对象。使用地图,它通过遍历每个项目表现得像一个forloop。现在,对于每个项目,您都可以返回一个 li Tag 元素,其中包含 vehicle.brand 或 vehicle.model...希望这是有道理的

      const renderVehiclesData  = vehiclesData .map((vehicle, index) => {
        return <li key={index}>{vehicle.brand}</li>;
      });
      

      【讨论】:

      • 谢谢,但是使用此代码它会立即渲染所有车辆。它不会停在 todosPerPage: 3;
      • 啊,在这种情况下,只需将车辆数据转为 currentTodos
      猜你喜欢
      • 2022-01-21
      • 2020-03-04
      • 1970-01-01
      • 2018-04-06
      • 2014-08-04
      • 1970-01-01
      • 2019-04-02
      • 2019-06-08
      • 1970-01-01
      相关资源
      最近更新 更多