日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

React Query 的 useQuery 竟也內置了分頁查詢支持!

來源: 責編: 時間:2024-06-27 17:19:16 149觀看
導讀本次我們將繼續 useQuery() API 的學習,著重講述 useQuery() 在分頁上的優化能力[3]。基本分頁功能實現項目中通常會遇到分頁查詢的需要,通過之前的學習,我們會寫出這樣的代碼。function Example() { const [page, setP

本次我們將繼續 useQuery() API 的學習,著重講述 useQuery() 在分頁上的優化能力[3]。Wws28資訊網——每日最新資訊28at.com

基本分頁功能實現

項目中通常會遇到分頁查詢的需要,通過之前的學習,我們會寫出這樣的代碼。Wws28資訊網——每日最新資訊28at.com

function Example() {  const [page, setPage] = useState(1)  const { isLoading, isError, error, data: posts } = useQuery(    ['posts', page],    () => axios.get('https://jsonplaceholder.typicode.com/posts', { params: { _page: page, _limit: 6 } })  )  return (    <div>      <h2>Posts(第{page}頁)</h2>      {        isLoading && <p>Loading....</p>      }      {        isError && <p>An error has occurred: {error.message}</p>      }      <ul>        {          posts?.data.map(post => (            <li key={post.id}>{post.title}</li>          ))        }      </ul>      <div style={{ display: 'flex', gap: '8px' }}>        <button disabled={isLoading} onClick={() => setPage(prePage => Math.max(0, prePage - 1))}>Previous Page</button>        <button disabled={isLoading} onClick={() => setPage(prePage => prePage + 1)}>Next Page</button>      </div>    </div>  )}

瀏覽器訪問:Wws28資訊網——每日最新資訊28at.com

圖片圖片Wws28資訊網——每日最新資訊28at.com

點擊“Next Page”查看下一頁數據。Wws28資訊網——每日最新資訊28at.com

圖片圖片Wws28資訊網——每日最新資訊28at.com

確實也實現了功能,不過體驗上不好的地方在于,每次切換到新一頁數據時,中間會間隔一個“Loading...”效果,導致頁面閃動。Wws28資訊網——每日最新資訊28at.com

為了不然頁面閃動,我們可以考慮在加載新頁面數據時,同時保留舊數據的展示不就行了嗎?后面一旦新數據到了,直接替換就行。Wws28資訊網——每日最新資訊28at.com

useQuery() API 可考慮到了這方面的使用體驗,于是便提供了一個 keepPreviousData 選項。Wws28資訊網——每日最新資訊28at.com

保留舊數據的分頁功能

我們在之前案例的基礎之上,調用 useQuery() 時,指定 keepPreviousData: true 選項。Wws28資訊網——每日最新資訊28at.com

const { isLoading, isError, error, data: posts } = useQuery(  ['posts', page],  () => axios.get('https://jsonplaceholder.typicode.com/posts', { params: { _page: page, _limit: 6 } }),  {    keepPreviousData: true  })

刷新頁面,再來看看加載新頁的效果。Wws28資訊網——每日最新資訊28at.com

圖片圖片Wws28資訊網——每日最新資訊28at.com

發現頁面不再閃動了。Wws28資訊網——每日最新資訊28at.com

不過,這種狀態下的中間狀態我們還要細致的控制一下,比如請求過程中禁用按鈕的點擊能力。Wws28資訊網——每日最新資訊28at.com

- const { isLoading, isError, error, data: posts } = useQuery()+ const { isLoading, isError, isFetching, error, data: posts } = useQuery()<div style={{ display: 'flex', gap: '8px' }}>-  <button disabled={isLoading} notallow={() => setPage(prePage => Math.max(0, prePage - 1))}>Previous Page</button>-  <button disabled={isLoading} notallow={() => setPage(prePage => prePage + 1)}>Next Page</button>+  <button disabled={isLoading || isFetching} notallow={() => setPage(prePage => Math.max(0, prePage - 1))}>Previous Page</button>+  <button disabled={isLoading || isFetching} notallow={() => setPage(prePage => prePage + 1)}>Next Page</button></div>

再次查看效果:Wws28資訊網——每日最新資訊28at.com

圖片圖片Wws28資訊網——每日最新資訊28at.com

不過,除了 isFetching,useQuery() 還返回了一個 isPreviousData 狀態,讓你判斷當前展示的是不是舊數據。Wws28資訊網——每日最新資訊28at.com

- const { isLoading, isError, isFetching, error, data: posts } = useQuery()+ const { isLoading, isError, isPreviousData, isFetching, error, data: posts } = useQuery()- <ul>+ <ul style={{ opacity: isPreviousData ? 0.5 : 1 }}>  {    posts?.data.map(post => (      <li key={post.id}>{post.title}</li>    ))  }</ul>

再次查看效果:Wws28資訊網——每日最新資訊28at.com

圖片圖片Wws28資訊網——每日最新資訊28at.com

這樣舊數據在展示期間,加了一點點透明效果。Wws28資訊網——每日最新資訊28at.com

至此,我們就講完了 useQuery() 的分頁優化能力。Wws28資訊網——每日最新資訊28at.com

總結

本文我講解了另一個 useQuery() 能力——keepPreviousData。Wws28資訊網——每日最新資訊28at.com

在設置 keepPreviousData: true 后,我們在進行分頁查詢時,同時能保持舊數據的展示,避免頁面閃動。Wws28資訊網——每日最新資訊28at.com

本質上,keepPreviousData 選項是 useQuery() 針對分頁場景上的一個優化能力。Wws28資訊網——每日最新資訊28at.com

當然,UI 交互中還有一種特殊的分頁場景,即無限查詢(Infinite Query)。這在“上滑/上拉查看歷史數據”,或者“下滑/下拉查看最新數據”被廣泛采用,不過 useQuery 是解決不了的了,這要靠 useInfiniteQuery()。Wws28資訊網——每日最新資訊28at.com

參考資料

[1]React Query 是做什么的?: https://juejin.cn/post/7378015213348257855Wws28資訊網——每日最新資訊28at.com

[2]一個數據獲竟然被 React Query 玩出這么多花樣來!: https://juejin.cn/post/7380342160581918731Wws28資訊網——每日最新資訊28at.com

[3]useQuery() 在分頁上的優化能力: https://tanstack.com/query/v3/docs/framework/react/guides/paginated-queriesWws28資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-96988-0.htmlReact Query 的 useQuery 竟也內置了分頁查詢支持!

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 用 foreach 風格遍歷的八個高效 Python 技巧

下一篇: vivo 互聯網自研代碼評審 VCR 落地實踐

標簽:
  • 熱門焦點
  • 2023 年的 Node.js 生態系統

    隨著技術的不斷演進和創新,Node.js 在 2023 年達到了一個新的高度。Node.js 擁有一個龐大的生態系統,可以幫助開發人員更快地實現復雜的應用。本文就來看看 Node.js 最新的生
  • WebRTC.Net庫開發進階,教你實現屏幕共享和多路復用!

    WebRTC.Net庫:讓你的應用更親民友好,實現視頻通話無痛接入! 除了基本用法外,還有一些進階用法可以更好地利用該庫。自定義 STUN/TURN 服務器配置WebRTC.Net 默認使用 Google 的
  • JVM優化:實戰OutOfMemoryError異常

    一、Java堆溢出堆內存中主要存放對象、數組等,只要不斷地創建這些對象,并且保證 GC Roots 到對象之間有可達路徑來避免垃 圾收集回收機制清除這些對象,當這些對象所占空間超過
  • 重估百度丨“晚熟”的百度云,能等到春天嗎?

    &copy;自象限原創作者|程心排版|王喻可2016年7月13日,百度云計算戰略發布會在北京舉行,宣告著百度智能云的正式啟程。彼時的會場座無虛席,甚至排隊排到了門外,在場的所有人幾乎都
  • 破圈是B站頭上的緊箍咒

    來源 | 光子星球撰文 | 吳坤諺編輯 | 吳先之每年的暑期檔都少不了瞄準追劇女孩們的古偶劇集,2021年有優酷的《山河令》,2022年有愛奇藝的《蒼蘭訣》,今年卻輪到小破站抓住了追
  • AI芯片初創公司Tenstorrent獲三星和現代1億美元投資

    Tenstorrent是一家由芯片行業資深人士Jim Keller領導的加拿大初創公司,專注于開發人工智能芯片,該公司周三表示,已經從現代汽車集團和三星投資基金等
  • iQOO 11S或7月上市:搭載“雞血版”驍龍8Gen2 史上最強5G Soc

    去年底,iQOO推出了“電競旗艦”iQOO 11系列,作為一款性能強機,iQOO 11不僅全球首發2K 144Hz E6全感屏,搭載了第二代驍龍8平臺及144Hz電競屏,同時在快充
  • 蘋果140W USB-C充電器:采用氮化鎵技術

    據10 月 30 日 9to5 Mac 消息報道,當蘋果推出新的 MacBook Pro 2021 時,該公司還推出了新的 140W USB-C 充電器,附贈在 MacBook Pro 16 英寸機型的盒子里,也支
  • 親歷馬斯克血洗Twitter,硅谷的苦日子在后頭

    文/劉哲銘  編輯/李薇  馬斯克再次揮下裁員大刀。  美國時間11月14日,Twitter約4400名外包員工遭解雇,此次被解雇的員工的主要工作為內容審核等。此前,T
Top 主站蜘蛛池模板: 平原县| 建水县| 弥勒县| 新蔡县| 渝中区| 河北省| 曲周县| 胶南市| 民勤县| 奈曼旗| 托克逊县| 桃江县| 舒兰市| 炎陵县| 太谷县| 萨迦县| 黔江区| 咸阳市| 东港市| 石河子市| 云林县| 桃源县| 如东县| 禄丰县| 专栏| 玉环县| 惠州市| 南京市| 乌拉特后旗| 隆安县| 武功县| 桂林市| 吴江市| 安西县| 青岛市| 鄂州市| 灵台县| 合作市| 万载县| 阳谷县| 泉州市|