滚动加载更多数据

时间:2019-03-07 09:11:15

标签: javascript reactjs

一旦用户单击“提交”,就会显示一个带有搜索输入的页面。

会有很多结果(通常不会,但是可能有成千上万个结果),我不想一次全部加载,如何获得几十个结果并从他的API中获取更多结果,因为用户向下滚动,这样做的正确方法是什么?我以为Lodash的节流阀可以合适,但我找不到很好的例子。

这是我的反应组件:

const getContacts = async (searchString) => {
  const { data: contactsInfo} = await axios.get(`api/Contats/Search?contactNum=${searchString}`);
  return contactsInfo;
};
export default class Home extends React.Component {
  state = {
    contactsInfo: [],
    searchString: '',
  };

  handleSubmit = async () => {
    const { searchString } = this.state;
    const contactsInfo = await getContacts(searchString);
    this.setState({ contactsInfo });
  };

  onInputChange = e => {
    this.setState({
      searchString: e.target.value,
    });
  };

  onMouseMove = e => {

  };

  render() {
    const { contactsInfo, searchString, } = this.state;
    return (
          <div css={bodyWrap} onMouseMove={e => this.onMouseMove(e)}>
            <Header appName="VERIFY" user={user} />
            {user.viewApp && (
              <div css={innerWrap}>
                <SearchInput
                  searchIcon
                  value={searchString || ''}
                  onChange={e => this.onInputChange(e)}
                  handleSubmit={this.handleSubmit}
                />
                     {contactsInfo.map(info => (
                      <SearchResultPanel
                        info={info}
                        isAdmin={user.isAdmin}
                        key={info.id}
                      />
                    ))}
              </div>
            )}
            <Footer />
          </div>

    );
  }
}

1 个答案:

答案 0 :(得分:1)

如果API支持分页,则可以使用React-Infinite-Scroll。看起来像这样

  <div style="height:700px;overflow:auto;">
    <InfiniteScroll
        pageStart={0}
        loadMore={loadFunc}
        hasMore={true || false}
        loader={<div className="loader">Loading ...</div>}
        useWindow={false}>
      {items}
    </InfiniteScroll>
  </div>

但是,如果REST API不支持它,您仍然可以加载数据并使用相同的库将数据块显示给用户,但您需要自己处理当前的加载状态。