通过react

时间:2018-12-16 11:21:48

标签: reactjs

我有一系列数据,这些数据在一个数组(json文件)中包含一些对象,它将由react显示。

class App extends React.Component {
constructor(props){
super(props);
this.state = {
data: [],
.
.
.
currentPage: 1,
itemsPerPage: 20,
value: '',
startIndex : 0,
endIndex : 4,
}}}

[{'id': '5c0b6cd9e1382352759fbc25', 'hotelinfo': {'hotelsearch': {'realname': 'Korston Hotel Moscow'}},{'id': '5c0b6cd9e1382352759fbc24', 'hotelinfo': {'hotelsearch': {'realname': 'Lavanta Hotel'}},{'id': '5c0b6cd9e1382352759fbc28', 'hotelinfo': {'hotelsearch': {'realname': 'Stanpoli Hotel'}}]

有一个分页,默认情况下显示4页,然后单击下一步按钮显示其余页面。

render() {
 const { data, currentPage, itemsPerPage,startIndex,endIndex } = this.state;
 const indexOfLastItem = currentPage * itemsPerPage;
 const indexOfFirstItem = indexOfLastItem - itemsPerPage;
 const currentItems = data.slice(indexOfFirstItem, indexOfLastItem);
 const renderHotel = currentItems.sort((a, b) => a.total - b.total).map((item, i) => {
 return  <div class="item">
         <span>{item.hotelinfo.hotelsearch.realname}</span>
      </div>
});
const pageNumbers = [];
  for (let i = 1; i <= Math.ceil(data.length / itemsPerPage); i++) {
  pageNumbers.push(i);
 }

const renderPageNumbers = pageNumbers.slice(startIndex, endIndex).map(number => {
 return (
   <li className={(this.state.currentPage === number ? 'active ' : '') + 'controls'}
  key={number}
  id={number}>
  {number}
 </li>
  )});
 return (
 <div>
  <input type="text" value={this.state.value} onChange={this.handleInputChange} class="hotelName" /><span onClick={this.handleSearch} class="searchbtn">search</span>
 {renderHotel}
  <ul id="page-numbers" class="pagenumDef">
    <li onClick={this.decremant} class="nexprev"><span class="fa-backward"></span></li>
    {renderPageNumbers}
   <li onClick={this.increment} class="nexprev"><span class="fa-forward"></span></li>
  </ul>
 </div>
 )};

我有一个输入,用户开始输入该输入(例如,用户键入'Korston'),然后单击一个按钮,新结果应仅包含那些包含“ Korston”名称的酒店的数据。

<div><input type="text" value={this.state.value} onChange=  {this.handleInputChange} /><span onClick={this.handelSearch}>search</span></div>

handleInputChange(event) {
     this.setState({ value: event.target.value });
}

handelSearch = () => {
 let inputval = this.state.value
 inputval = inputval.toLowerCase()
 .split(' ')
 .map((s) => s.charAt(0).toUpperCase() + s.substring(1))
 .join(' ');
 let result = this.state.data.filter((item) => {
 let realname = item.hotelinfo.hotelsearch.realname
 let len = realname.length 
 if (len !== 0){
 if (realname.includes(inputval)){
   return true
 } else {
   return false
 }
 }
})
 return this.setState({data : eval(result)}, () => console.log("ITEMS : ",this.state.data) )
 };

存在三个问题: 首先:例如我们默认有100个结果。用户键入一个名称,将有20个搜索结果。对于文本搜索,将在20个结果而不是100个结果之间进行过滤。 第二个:例如,我们在第4页中。用户在第1页中搜索名称。在console.log中,我可以看到它的结果:

this.setState({data : eval(result)}, () => console.log("ITEMS : ",this.state.data) )

,但是直到用户单击分页中的数字,结果才会显示。 第三:例如,我们在第6页中。用户在以下位置搜索名称 第2页console.log中不会有任何结果。 (默认情况下,分页中有4页,单击下一步按钮将显示其余页面。) 有道理吗?

0 个答案:

没有答案
相关问题