javascript - 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>
非常感谢!
解决方案
当用户更改搜索文本时(当过滤器更改时),将页面更改回 1。因为当搜索文本发生变化时,结果数据集也会发生变化。结果可能没有足够的数据用于第二页。
推荐阅读
- r - R Datatables 自定义按钮
- reactjs - 在组件上自动传递道具
- python - 获取列表中字符串的最后一部分
- python - 如何合并来自多个数据框的列
- python - 在 Python 中向量化条件逻辑?
- charts - 如何在 Google 图表中添加范围标记?
- eclipse - 第一次在 Eclipse 中运行 Scala 时的运行配置问题
- arrays - 警告:初始化从指针目标类型中丢弃“const”限定符
- javascript - 在表单上点击“Enter”不会运行 JavaScript 函数,而是重新加载页面。为什么?
- ajax - AJAX 请求:/wp-admin/admin-ajax.php 403