当前位置: 首页 > 知识库问答 >
问题:

将页码添加到url-反应分页

邹毅
2023-03-14

我试图将页码添加到url中(在useEffect函数的末尾),但现在导航到另一个页面将不再有效,每次我单击第2页时,只会导航回第1页,有人能看到我在这里做错了什么吗?我添加了我的列表组件、分页组件和应用程序。js。

书单。js

import React, { useState, useEffect } from "react";

import queryString from "query-string";
import Books from "./Books";
import Pagination from "./Pagination";
import axios from "axios";
import { useHistory, useLocation } from "react-router-dom";

import { Container } from "react-bootstrap";

const BooksList = () => {
  const location = useLocation();
  const history = useHistory();
  const path = window.location.pathname;
  const initialQueryString = queryString.parse(location.search);
  const initialPageNumber = Number(initialQueryString.page) || 1;

  const [books, setBooks] = useState([]);
  const [loading, setLoading] = useState(false);
  const [error, setError] = useState(null);
  const [currentPage, setCurrentPage] = useState(initialPageNumber);
  const [booksPerPage, setBooksPerPage] = useState(5);

  useEffect(() => {
    const fetchBooks = async () => {
      try {
        setError(false);
        setLoading(true);
        const res = await axios.post("http://nyx.vima.ekt.gr:3000/api/books");

        setBooks(res.data.books);

        setLoading(false);
      } catch (err) {
        console.log(err);
        setError(true);
        setLoading(false);
        setBooks([]);
      }
    };

    fetchBooks();
    history.push(`${path}?page=${currentPage}`);
  }, [currentPage, history, path]);

  const indexOfLastBook = currentPage * booksPerPage;
  const indexOfFirstBook = indexOfLastBook - booksPerPage;
  const currentBooks = books.slice(indexOfFirstBook, indexOfLastBook);
  const paginate = pageNumber => setCurrentPage(pageNumber);

  if (error) return <div>Error message</div>;

  return (
    <Container>
      <Books books={currentBooks} loading={loading} />
      <Pagination
        booksPerPage={booksPerPage}
        booksAmount={books.length}
        paginate={paginate}
      />
    </Container>
  );
};

export default BooksList;

Pagination.js

import React from "react";

const Pagination = ({ booksPerPage, booksAmount, paginate }) => {
  const pageNumbers = [];

  for (let i = 1; i < Math.ceil(booksAmount / booksPerPage); i++) {
    pageNumbers.push(i);
  }

  return (
    <div className="container mt-5">
      <nav>
        <ul className="pagination">
          {pageNumbers.map(number => {
            return (
              <li className="page-item" key={number}>
                <a
                  href="!#"
                  onClick={() => paginate(number)}
                  className="page-link"
                >
                  {number}
                </a>
              </li>
            );
          })}
        </ul>
      </nav>
    </div>
  );
};

export default Pagination;

应用程序。js

import "./App.css";
import { BrowserRouter as Router, Route, Switch } from "react-router-dom";
import BooksList from "./components/BooksList";

const App = () => {
  return (
    <Router>
      <Switch>
        <Route exact path="/" component={BooksList} />
        <BooksList />
      </Switch>
    </Router>
  );
};

export default App;

共有1个答案

堵宪
2023-03-14

在分页中的onClick方法中添加此行。js:

e.preventDefault();

以下是代码:

return (
    <div className="container mt-5">
      <nav>
        <ul className="pagination">
          {pageNumbers.map((number) => {
            return (
              <li className="page-item" key={number}>
                <a
                  href="!#"
                  onClick={(e) => {
                    paginate(number);
                    e.preventDefault();
                  }}
                  className="page-link"
                >
                  {number}
                </a>
              </li>
            );
          })}
        </ul>
      </nav>
    </div>
  );
};

基本上,每次单击按钮时,页面都会重新渲染/刷新,所有数据都会丢失。所以你的页面会回到默认状态。

 类似资料:
  • 问题内容: 我花了一点时间试图找出一种将标头添加到的方法,但未成功。 这是我到目前为止所得到的: 在似乎是处理的配置对象的项目。由于找不到任何方法,因此决定使用方法,并将标头视图添加到第一个位置以用作标头。 Aaand这就是事情变得更糟的地方: 在尝试创建的不同时刻调用了几次之后(还尝试在设置所有内容(甚至是适配器的数据)后添加视图),我意识到我不知道这是否是正确的方法(并且它看起来不是)。 PS

  • 本文向大家介绍javascritp添加url参数将参数加入到url中,包括了javascritp添加url参数将参数加入到url中的使用技巧和注意事项,需要的朋友参考一下 将对象参数加入到url中,如果原来url中有则覆盖 js代码

  • 问题内容: 我在将新的简单XWPFTable添加到XWPFHeader(或Footer)时遇到了严重的麻烦。不幸的是,似乎只有一个人遇到相同的问题(https://bz.apache.org/bugzilla/show_bug.cgi?id=57366#c0)。 有谁有办法实现这一目标? 任何帮助将不胜感激! 亲切的问候… 〜丹尼尔 问题答案: 这可以使用公共XWPFTable insertNew

  • 问题内容: 如何使用itext从html源向pdf添加标头? 当前,我们扩展了PdfPageEventHelper并覆盖了这些方法。工作正常,但是当我进入2个以上页面时,它将引发RuntimeWorkerException。 问题答案: 通常, 禁止 在事件中添加内容。这是 禁止 添加内容到的对象。您应该使用而 不是 文档在方法中添加页眉和页脚。此外:通过一遍又一遍地解析HTML,您正在浪费大量C

  • 问题内容: 我有一个ListView活动,该活动需要项目列表的页脚,以便您可以单击它,这会将更多项目加载到列表中。该列表由我的SimpleAdapter支持,该SimpleAdapter由字符串映射支持,并且在设置适配器之前,我这样做是为了添加页脚: 但是我在调​​试器中得到了这个异常 java.lang.NullPointerException android.widget.ListView.c

  • 我正在我的项目中尝试新的ReactiveQuerydslPredicateExecutor,但我找不到像在QueryDslPredicateExecutor中那样的findAll(谓词,分页)方法 这是故意的吗?这是否意味着对于reactive不建议使用分页?