Поиск и страница в ReactJS

Я работаю с ReactJS, перечисляя данные, отображаемые в таблице, и фильтруя входные данные.

Поиск работает нормально, пока вы выполняете его со страницы № 1. Если я выполняю поиск с другой страницы, чем первая, и введенные данные отсутствуют на странице, где я обнаружил, что данные в таблице исчезнут и вернутся, пока я не устраню слово поиска.

Это мой код:

Государство:

  state = {
    searchText: '',
    currentPage: 1,
    itemsOnPage: 3,
  };

Таблица с фильтром:

  dataTable = () =>{

const { currentPage, itemsOnPage, searchText } = this.state;
const { clients } = this.props;

const filterData = clients.filter( client => {
  return client.name.toLowerCase().indexOf(searchText.toLowerCase() ) !== -1
})

const indexOfLastItem = currentPage * itemsOnPage;
const indexOfFirstItem = indexOfLastItem - itemsOnPage;
const currentItems = filterData.slice(indexOfFirstItem, indexOfLastItem);


const renderItems = currentItems.map((data, key) => {
      return (

        <Client
          key = {key}
          client  = {data}
        />
      )
    });
    return renderItems;
  }

Пагинация:

  paginationNumbers = () =>{
    const { clients } = this.props;
    const { itemsOnPage, searchText } = this.state;
    const filterData = clients.filter( client => {
      return client.name.toLowerCase().indexOf(searchText.toLowerCase() ) !== -1
    })
    const pagesToNumbers = [];
    for (let i = 1; i <= Math.ceil(filterData.length / itemsOnPage); i++) {
      pagesToNumbers.push(i);
    } 

    let lastItem = pagesToNumbers[pagesToNumbers.length-1];

    const numbers = pagesToNumbers.map(number => {
      return (
          <li className = "waves-effect"
           key = {number} 
           id = {number}
           className = { this.state.currentPage === number ? "active" : null }
           onClick = {this.handleClick} style = { styles.paginationButtons }
           >
               {number}
          </li>
      );
    });

    return (
      <React.Fragment>
        <li className = { this.state.currentPage === 1 ? "hide" : "waves-effect" }
        onClick = {this.handlePrevious}
        >
        <i className = "material-icons">chevron_left</i></li>
          { numbers }
        <li className = { this.state.currentPage === lastItem ? "hide" : "waves-effect" }
         onClick = {this.handleNext}
        >
        <i className = "material-icons">chevron_right</i></li>
      </React.Fragment>
    );
  }

Действия кнопок:

  handlePrevious = () => {
    this.setState({
      currentPage: this.state.currentPage -1 
    })
  }

  handleNext = () => {
    this.setState({
      currentPage: this.state.currentPage +1 
    }) ;
  }

  handleClick = (e) => {
    this.setState({
        currentPage: Number(e.target.id)
      });
  }

При изменении Вход в фильтр:

  onChange = e => {
    this.setState({ searchText: e.target.value });
  }

Вот код при рендеринге:

        <input
            name = "searchText"
            value = {searchText}
            onChange = {this.onChange}
          />  

      <div className = "col s12">
          <input
            name = "searchText"
            value = {searchText}
            onChange = {this.onChange}
          />
      </div>

Большое спасибо!

Поведение ключевого слова "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
171
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Измените страницу обратно на 1, когда пользователь изменяет текст для поиска (когда изменяется фильтр). потому что при изменении текста поиска изменяется и результирующий набор данных. результат может не содержать достаточно данных для второй страницы.

Я думал об этом, но хотел знать, могут ли они придумать здесь что-нибудь другое. Я сделаю так, чтобы продолжить. Благодарю тебя, братан.

OscarDev 22.08.2018 08:07

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