react-infinite-scroll-component 中文文檔

官網(wǎng)地址:https://github.com/ankeetmaini/react-infinite-scroll-component

記得自己曾經(jīng)弱弱的發(fā)問,為什么上拉加載更多會觸發(fā)多次。

1 上拉加載更多

默認以body/window為容器

import React, { useState, useEffect } from 'react';
import request from '@/utils/request';
import InfiniteScroll from 'react-infinite-scroll-component';
export default () => {
  const [list, setList] = useState([]);
  const requestList = () => {
    setTimeout(async () => {
      const response = await request.get('/api/notes/list', {
        params: {
          name: 12,
        },
      });
      setList(list.concat(response.list));
    }, 1000);
  };
  useEffect(() => {
    requestList();
  }, []);
  return (
    <div>
      <InfiniteScroll
        dataLength={list.length}
        next={requestList}
        hasMore={false}
        endMessage={
          <p style={{ textAlign: 'center' }}>
            <b>Yay! You have seen it all</b>
          </p>
        }
        loader={<h4>Loading...</h4>}
      >
        {list.map((item, index) => (
          <div style={{ height: 100 }} key={index}>
            {item.id}
          </div>
        ))}
      </InfiniteScroll>
    </div>
  );
};

效果如圖


屬性 作用 注意事項
dataLength 當您上拉時紧索,程序會根據(jù)這個值有沒有發(fā)生變化決定是否觸發(fā)next 當數(shù)據(jù)發(fā)生變化的間隔非常小時灯蝴,是會觸發(fā)多次的虑啤,比如快速的把滾動條拖到底
next 用戶上拉達到閾值時用于加載更多數(shù)據(jù)
hasMore 是否還有更多的數(shù)據(jù) falsenext不會觸發(fā)
endMessage 沒有更多數(shù)據(jù)時上拉到底部會顯示 需要hasMorefalse
scrollThreshold 上拉時觸發(fā)next,相當于底部的距離 默認是0.8咏瑟,您可以設(shè)置自己的值尚卫,比如200px酪捡,則會按照 100%-200px叁征,顯然,隨著滾動區(qū)域越來越高逛薇,100%越來越大捺疼,200固定不變,意味著越往后您越要上拉的更接近底部才會觸發(fā)next

在指定區(qū)域內(nèi)觸發(fā)

只需要使用height

...
      <InfiniteScroll
      ...
        height={400}
      ...
      >
...

效果


指定滾動的父容器

需要用到scrollableTarget永罚,這時候InfiniteScroll 就沒必要指定height

      <div
        id="scrollableDiv"
        style={{ height: 300, overflow: 'auto' }}
      >
        <InfiniteScroll
          ...
          scrollableTarget="scrollableDiv"
          ...
        >
    ...
      </div>

下拉刷新

import React, { useState, useEffect } from 'react';
import request from '@/utils/request';
import InfiniteScroll from 'react-infinite-scroll-component';
export default () => {
  const [list, setList] = useState([]);
  const requestList = () => {
    setTimeout(async () => {
      const response = await request.get('/api/notes/list', {
        params: {
          name: 12,
        },
      });
      setList(list.concat(response.list));
    }, 1000);
  };
  useEffect(() => {
    requestList();
  }, []);
  return (
    <InfiniteScroll
      dataLength={list.length} //This is important field to render the next data
      next={requestList}
      hasMore={true}
      loader={<h4>Loading...</h4>}
      refreshFunction={requestList}
      pullDownToRefresh
      pullDownToRefreshThreshold={10}
      pullDownToRefreshContent={
        <h3 style={{ textAlign: 'center' }}>
          &#8595; Pull down to refresh
        </h3>
      }
      releaseToRefreshContent={
        <h3 style={{ textAlign: 'center' }}>
          &#8593; Release to refresh
        </h3>
      }
    >
      {list.map((item, index) => (
        <div style={{ height: 100 }} key={index}>
          {item.id}
        </div>
      ))}
    </InfiniteScroll>
  );
};

這個要在移動端看啤呼,PC端我在mac筆記本上用 三指下拉也看到過

import React, { useState, useEffect } from 'react';
import request from '@/utils/request';
import InfiniteScroll from 'react-infinite-scroll-component';
export default () => {
  const [list, setList] = useState([]);
  const requestList = () => {
    setTimeout(async () => {
      const response = await request.get('/api/notes/list', {
        params: {
          name: 12,
        },
      });
      setList(list.concat(response.list));
    }, 1000);
  };
  useEffect(() => {
    requestList();
  }, []);
  return (
    <InfiniteScroll
      style={{ marginTop: 120 }}
      height={400}
      dataLength={list.length} //This is important field to render the next data
      next={requestList}
      hasMore={true}
      loader={<h4>Loading...</h4>}
      refreshFunction={requestList}
      pullDownToRefresh
      pullDownToRefreshThreshold={30}
      pullDownToRefreshContent={
        <h3 style={{ textAlign: 'center' }}>
          &#8595; Pull down to refresh
        </h3>
      }
      releaseToRefreshContent={
        <h3 style={{ textAlign: 'center' }}>
          &#8593; Release to refresh
        </h3>
      }
    >
      {list.map((item, index) => (
        <div style={{ height: 100 }} key={index}>
          {item.id}
        </div>
      ))}
    </InfiniteScroll>
  );
};

屬性 作用 注意事項
pullDownToRefresh 是否開啟下拉刷新,默認為false
refreshFunction 觸發(fā)下拉刷新時調(diào)用的函數(shù)
pullDownToRefreshContent 未達到下拉閾值顯示的內(nèi)容
releaseToRefreshContent 達到下拉閾值顯示的內(nèi)容

效果如下

Screenshot_20200718_220845_com.chrome.beta.jpg
Screenshot_20200718_220851_com.chrome.beta.jpg

其余的一些屬性

name type description
children node (list) the data items which you need to scroll.
onScroll function a function that will listen to the scroll event on the scrolling container. Note that the scroll event is throttled, so you may not receive as many events as you would expect.
className string add any custom class you want
style object any style which you want to override
hasChildren bool children is by default assumed to be of type array and it's length is used to determine if loader needs to be shown or not, if your children is not an array, specify this prop to tell if your items are 0 or more.
initialScrollY number set a scroll y position for the component to render with.
key string the key for the current data set being shown, used when the same component can show different data sets at different times, default=undefined
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市呢袱,隨后出現(xiàn)的幾起案子官扣,更是在濱河造成了極大的恐慌,老刑警劉巖羞福,帶你破解...
    沈念sama閱讀 211,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件惕蹄,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機卖陵,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,347評論 3 385
  • 文/潘曉璐 我一進店門遭顶,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人泪蔫,你說我怎么就攤上這事棒旗。” “怎么了撩荣?”我有些...
    開封第一講書人閱讀 157,435評論 0 348
  • 文/不壞的土叔 我叫張陵铣揉,是天一觀的道長。 經(jīng)常有香客問我餐曹,道長老速,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,509評論 1 284
  • 正文 為了忘掉前任凸主,我火速辦了婚禮,結(jié)果婚禮上额湘,老公的妹妹穿的比我還像新娘卿吐。我一直安慰自己,他們只是感情好锋华,可當我...
    茶點故事閱讀 65,611評論 6 386
  • 文/花漫 我一把揭開白布嗡官。 她就那樣靜靜地躺著,像睡著了一般毯焕。 火紅的嫁衣襯著肌膚如雪衍腥。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,837評論 1 290
  • 那天纳猫,我揣著相機與錄音婆咸,去河邊找鬼。 笑死芜辕,一個胖子當著我的面吹牛尚骄,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播侵续,決...
    沈念sama閱讀 38,987評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼倔丈,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了状蜗?” 一聲冷哼從身側(cè)響起需五,我...
    開封第一講書人閱讀 37,730評論 0 267
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎轧坎,沒想到半個月后宏邮,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,194評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,525評論 2 327
  • 正文 我和宋清朗相戀三年蜀铲,在試婚紗的時候發(fā)現(xiàn)自己被綠了边琉。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,664評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡记劝,死狀恐怖变姨,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情厌丑,我是刑警寧澤定欧,帶...
    沈念sama閱讀 34,334評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站怒竿,受9級特大地震影響砍鸠,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜耕驰,卻給世界環(huán)境...
    茶點故事閱讀 39,944評論 3 313
  • 文/蒙蒙 一爷辱、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧朦肘,春花似錦饭弓、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,764評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至趴生,卻和暖如春阀趴,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背苍匆。 一陣腳步聲響...
    開封第一講書人閱讀 31,997評論 1 266
  • 我被黑心中介騙來泰國打工刘急, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人浸踩。 一個月前我還...
    沈念sama閱讀 46,389評論 2 360
  • 正文 我出身青樓排霉,卻偏偏與公主長得像,于是被迫代替她去往敵國和親民轴。 傳聞我的和親對象是個殘疾皇子攻柠,可洞房花燭夜當晚...
    茶點故事閱讀 43,554評論 2 349