React-bootstrap-table - собственное количество элементов пагинации

Я использую BootstrapTable из response-bootstrap-table и беру данные из внешнего API. Каждый раз я получаю предмет из 30 предметов. Следовательно, pageSize равен 30, но я получаю переменную totalPages из API, которая, скажем, равна 6. К сожалению, данные таблицы каждый раз 30, поэтому есть только одна страница. React-bootstrap-table - собственное количество элементов пагинации

Я хотел бы указать в таблице, сколько страниц я хочу иметь - 6 - и каждый раз, когда по щелчку в элементе разбивки на страницы, я буду вызывать другую ссылку API. Как я могу этого добиться?

  onPageChange = page => {
    alert(`Let's go to page: ${page}`);
  };

  render() {
    const options = {
      onPageChange: this.onPageChange,
      hideSizePerPage: true,
      page: 1,
      sizePerPage: this.props.pageSize,
      paginationSize: 6,
    };
    return (
      <Card>
        <CardHeader>
          <h1> Sales report</h1>
        </CardHeader>
        <CardBody>
          <BootstrapTable
            data = {this.props.sales}
            version = "4"
            striped
            hover
            pagination
            options = {options}
            keyField = "Type"
          >
            {tableHeaders.map((header, index) => (
              <TableHeaderColumn key = {index} dataField = {header}>
                {header}
              </TableHeaderColumn>
            ))}
          </BootstrapTable>
        </CardBody>
      </Card>
    );
  }
Поведение ключевого слова "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
2 955
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Вы должны передать объект options и указать точное количество элементов и обратный вызов, щелкая по каждой странице.

Например:

class PaginationHookTable extends React.Component {
  constructor(props) {
    super(props);

    this.options = {
      onPageChange: this.onPageChange,
      sizePerPage: 6,
    };

    this.state = {
        data: [],
    }
  }

  onPageChange = (page, sizePerPage) => {
    alert(`page: ${page}, sizePerPage: ${sizePerPage}`);

    // make another url
    const url = `http://someurl.com/api/endpoint?page=${page}`;

    // make request and update state with new data
    // axios just for example
    axios.get(url).then(resp => this.setState({ data: resp });
  }

  render() {
    return (
      <div>
        <BootstrapTable
          data = {this.state.data}
          options = {this.options}
          remote = {true}

          // you need to use your number of total from backend
          // instead of 100 ofc
          fetchInfo = {{ dataTotalSize: 100 }}
          pagination>
          <TableHeaderColumn dataField='id'>Product ID</TableHeaderColumn>
          <TableHeaderColumn dataField='name'>Product Name</TableHeaderColumn>
          <TableHeaderColumn dataField='price'>Product Price</TableHeaderColumn>
        </BootstrapTable>
      </div>
    );
  }
}

ОБНОВИТЬ: Вы должны передать дополнительные реквизиты: remote = {true} и fetchInfo: { dataTotalSize: 100 }, чтобы указать общее количество элементов.

См. Еще здесь.

Я видел этот пример и использую часть этого кода с onPageChange, но это не решает мою проблему (или я не понимаю, что вы имеете в виду). Проблема в том, что данные - 30 элементов, размер страницы - 30 элементов. также, но я хочу иметь эту разбивку на страницы, потому что я получу от API еще 30 элементов данных при изменении страницы. Итак, страница 1 -API1, страница 2 -API2 и т. д. Я думаю, что с вашим кодом все равно будет 1 элемент разбивки на страницы, потому что таблица считает, что нужен только 1

jake-ferguson 16.08.2018 11:26

Отредактировал ответ - добавил код. Таким образом, в основном таблица response-bootstrap не заботится о paginationSize: 6, потому что данные - 30items, а pageSize - также 30items

jake-ferguson 16.08.2018 11:30

@ jake-ferguson вы используете первую версию react-bootstrap-table?

Denys Kotsur 16.08.2018 11:32

Вам не нужно использовать paginationSize - он предназначен только для отображения полосы. Я обновил ответ, как вызвать другой URL-адрес API. Чтобы указать, сколько элементов должно быть на странице, используйте sizePerPage. Также убедитесь, что вы передаете правильное значение в качестве опоры здесь sizePerPage: this.props.pageSize. Я создал для вас codeandbox - проверьте это - кликните сюда.

Denys Kotsur 16.08.2018 11:45

в этой песочнице происходит то же самое, что и в моем примере - если мы изменим sizePerPage на 2, то будет только на странице - один элемент в разбивке на страницы

jake-ferguson 16.08.2018 11:59

@ jake-ferguson Я обновил свой ответ в разделе ОБНОВИТЬ.

Denys Kotsur 16.08.2018 12:09

У меня есть еще одна проблема с разбиением на страницы, в конце концов, я должен начать с 0 в качестве индекса первой страницы, и моя таблица будет выглядеть так: imgur.com/CxPqtIJ. Может ли первая (номер1) быть страницей = 0? как это сделать?

jake-ferguson 23.08.2018 08:13

@ jake-ferguson Вам нужно отобразить 0? Если нет, вы можете просто вычесть 1 перед отправкой запроса на сервер.

Denys Kotsur 23.08.2018 08:19

нет, когда у меня в магазине page = 0 и я беру из серверных данных со страницы 0 Я хочу, чтобы компонент разбиения на страницы отображал 1 и т. д.

jake-ferguson 23.08.2018 08:33

Насколько я понимаю, вы должны перед отправкой запроса на следующие данные вычесть 1, например: onPageChange = (page) => {axios.get(`https://someurl.com/api?page=${page-1}`).then(..‌​.) }

Denys Kotsur 23.08.2018 08:35

@ jake-ferguson или просто передайте объект option, рассчитанный page prop: const options = { page: this.state.currentPage + 1 // Showing page 1 if currentPage 0 };

Denys Kotsur 23.08.2018 08:40

Что ж, я сделал это, и это работает только в начале. в опциях у меня есть page: this.props.filters.page + 1, и при входе в таблицу он показывает правильно 1, но когда я перехожу на страницу номер 2, он отмечает и показывает, как было 3, при переходе на 1 он показывает 2 ...

jake-ferguson 23.08.2018 08:42

и вот моя функция onPageChange `onPageChange = page => {this.props.changePage (page); this.props.getSales (); }; `

jake-ferguson 23.08.2018 08:43

Хорошо, я только что вычел 1 в функции this.props.changePage(page - 1), и теперь все в порядке, еще раз спасибо

jake-ferguson 23.08.2018 08:45

нет, извините, это не так; / stackoverflow.com/questions/51984415/…

jake-ferguson 23.08.2018 13:26

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