Как динамически обрабатывать отображение номеров страниц с учетом нумерации страниц? : ReactJS

Я не программист и не разработчик, но у меня есть веб-сайт, созданный кем-то другим, и нумерация страниц выходит из-под контроля.

Изображение:

Как вы можете видеть, в настоящее время у меня есть 17 страниц, которые отображаются на моей навигационной нумерации, но я бы хотел, чтобы они отображались только 10 из них, когда вы находитесь на странице 1, а когда вы нажимаете страницу 2, я бы хотел, чтобы это измените максимальную страницу на страницу 11; когда я нахожусь на странице 3, я хочу, чтобы максимальная отображаемая страница была страницей 12 и так далее.

Я не уверен, как правильно это объяснить, но я хочу, чтобы отображаемые минимальные и максимальные страницы динамически увеличивались, примерно так:

На странице 1: Предыдущий 1 2 3 4 5 Следующий

На странице 5: Предыдущая 3 4 5 6 7 Следующая

Я просмотрел эту ветку, но до сих пор не могу понять, потому что код сильно отличается от того, что использует мой сайт(?)

Это код .jsx:

function NewsRow(props) {
  const [posts, setPosts] = useState([])

  useEffect(() => {
    const fetchAllPosts = async () => {
      try {
        const res = await axios.get("/api")
        setPosts(res?.data);
      } catch (error) {
        console.info(error)
      }
    }

    fetchAllPosts()
  }, [posts.length])

  //save new entries when adding new post on site
  const saveNewEntryHandler = (enteredData) => setPosts(prevPosts => [enteredData, ...prevPosts])

  //PAGINATION
  const [currentPage, setCurrentPage] = useState(1)
  const recordsPerPage = 4
  const numberOfPages = Math.ceil(posts.length / recordsPerPage)
  const lastIndex = currentPage * recordsPerPage
  const firstIndex = lastIndex - recordsPerPage
  const paginatedPosts = posts.slice(firstIndex, lastIndex)
  const numbers = [...Array(numberOfPages + 1).keys()].slice(1)

  const prevPage = () => { if (currentPage !== 1) setCurrentPage(currentPage - 1) }
  const changeCurrentPage = (id) => setCurrentPage(id)
  const nextPage = () => { if (currentPage !== numberOfPages) setCurrentPage(currentPage + 1) }


  return (
    <div className = {styles.content_column} >
      <ImageCarousel />
      <Welcome />

      <NewsInput onSaveNewEntry = {saveNewEntryHandler} fullList = {posts} />

      {paginatedPosts.map((object) => (
        <NewsCard
          key = {object.id}
          id = {object.id}
          title = {object.title}
          date = {object.date}
          description = {object.description}
          image = {object.img} />
      ))}

      <Pagination>

        <PaginationItem
          className = {'paginationItemStyle'}>
          <PaginationLink onClick = {prevPage}>Prev</PaginationLink>
        </PaginationItem>

        {numbers.map((i, key) => (
          <PaginationItem
            key = {key}
            className = {'paginationItemStyle'}
            active = {currentPage === i }>
            <PaginationLink onClick = {() => changeCurrentPage(i)}>
              {i}
            </PaginationLink>
          </PaginationItem>
        ))}

        <PaginationItem
          className = {'paginationItemStyle'}>
          <PaginationLink onClick = {nextPage}>Next</PaginationLink>
        </PaginationItem>

      </Pagination>

    </div>
  )
}

export default NewsRow

и это .scss:

.paginationItemStyle {
    &.page-item {
        button {
            background-color: rgba(47, 53, 59, 0.5);
            border-color: #000000;
            color: #ffffff;
        }
        &.active, &:hover {
            button {
                background-color: rgb(47, 53, 59);
                color: rgb(34,138,252);
            }
        }
    }
}

Я знаю, что нужно изменить const numberOfPages = Math.ceil(posts.length / recordsPerPage) , но понятия не имею, на что именно мне его нужно изменить, а человек, который создал мне этот сайт, недоступен.

Любая помощь очень ценится.

Я поискал в Интернете такие решения, как в этой теме, но не смог найти «код», соответствующий моему собственному.

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
60
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Замените numbers на это:

    const maxElements = 10;
    const numbers = [...Array(numberOfPages + 1).keys()]
      .slice(1)
      .slice(currentPage - 1, Math.min(currentPage - 1 + maxElements, numberOfPages));

Спасибо за помощь! Это частично решило проблему xD Теперь при запуске отображается только 10 страниц. Однако, когда я нажимаю на другие страницы, он увеличивает количество страниц, отображаемых на нумерации страниц, вместо обновления номеров страниц, сохраняя при этом 10 страниц, отображаемых на нумерации страниц. i.imgur.com/yV9SyES.png i.imgur.com/7Hbpmul.png i.imgur.com/Tc0QkUC.png Есть ли что-нибудь еще, что мне нужно добавить, чтобы это исправить?

enimox 05.04.2024 11:05

Потому что в вашем вопросе вы хотите «увеличить максимальное количество страниц», отсюда и мой ответ. Только что обновил ответ

quyentho 05.04.2024 11:09

Ой, извини, это была моя вина! Я не уточнил, потому что я дал ссылку на другую тему, в которой была та же проблема, что и у меня. В вашем новом редактировании теперь отображаются страницы под номером 10 и не отображаются страницы 11+ и выше. Я отредактировал свое сообщение, включив в него подробную информацию о том, что я на самом деле хочу отобразить ;u;

enimox 05.04.2024 11:13

Я не уверен, что вы редактировали. То есть вы не хотите показывать уже пройденные страницы, сохраняя при этом количество отображаемых страниц равным 10?

quyentho 05.04.2024 11:18

Пример: на странице 1: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], на странице 2: [2, 3, 4, 5, 6, 7, 8, 9, 10, 11].

quyentho 05.04.2024 11:20

Я отредактировал и добавил пример сейчас! Да, это так, как вы только что сказали

enimox 05.04.2024 11:20

Попробуйте ответить еще раз, я обновил

quyentho 05.04.2024 11:20

Решено! Огромное спасибо за ваше время и терпение!

enimox 05.04.2024 11:23

Другие вопросы по теме