主要功能:
react-query (TanStack Query支持多種框架,當前文檔僅描述react版)
主要用于管理異步數(shù)據(jù)獲取、緩存、數(shù)據(jù)過期更新及異常處理、失敗重試。適用于需要全面數(shù)據(jù)獲取功能的大型應(yīng)用
- 數(shù)據(jù)獲?。?/strong>
- 提供數(shù)據(jù)加載狀態(tài)方便UI處理。
- 支持多種請求類型。
- 自動處理異常并返回對應(yīng)的響應(yīng)數(shù)據(jù)。
- 自帶緩存機制:
- 數(shù)據(jù)獲取成功自動緩存數(shù)據(jù),減少不必要的網(wǎng)絡(luò)請求。
- 提供 cacheTime 和 staleTime 配置項來控制緩存的有效期和數(shù)據(jù)的新鮮度。
- 數(shù)據(jù)緩存過期后自動后臺刷新重新獲取數(shù)據(jù)。
- 支持共享緩存,可多個組件共享一份接口數(shù)據(jù)緩存。
- 并發(fā)模式支持:確保在網(wǎng)絡(luò)請求未完成時安全地卸載組件,避免內(nèi)存泄漏和其他潛在問題
-
數(shù)據(jù)更新:
- 樂觀更新:通過 useMutation Hook 支持創(chuàng)建、更新或刪除資源的操作,實現(xiàn)樂觀更新,即在請求完成前更新UI,先顯示預(yù)期的結(jié)果,提升用戶體驗,如果請求失敗則回滾到原始狀態(tài)。
- 自動失效:在數(shù)據(jù)更新完成后,自動失效相關(guān)緩存并重新緩存新數(shù)據(jù)
- 窗口聚焦刷新:用戶重新聚焦窗口時自動刷新數(shù)據(jù)
- 網(wǎng)絡(luò)重連刷新:網(wǎng)絡(luò)重新連接時自動刷新數(shù)據(jù)
- 輪詢:通過refetchInterval定期刷新數(shù)據(jù)
- 手動觸發(fā)請求:允許通過 manual 選項將請求設(shè)置為手動觸發(fā),配合 run 方法按需發(fā)起請求。
-
數(shù)據(jù)展示和交互功能:
- 無限滾動與分頁:使用 useInfiniteQuery Hook 來實現(xiàn)無限滾動功能,簡化分頁邏輯的管理。
- 優(yōu)雅處理異步數(shù)據(jù)加載及錯誤處理:與React Suspense集成,設(shè)置useQuery鉤子的suspense選項為true
-
插件與擴展功能:
- react-query/devtools:提供了一個React DevTools面板,用于查看和管理React Query的緩存、請求歷史和查詢狀態(tài),幫助開發(fā)者清晰地觀察每個請求的狀態(tài)及其相關(guān)緩存信息。
- react-query/hydration:在服務(wù)器端渲染(SSR)應(yīng)用程序中,可以自動提取數(shù)據(jù)并在客戶端上進行緩存。這有助于減少客戶端的加載時間,提升用戶體驗。
- react-query/persistCache:可以將緩存存儲在本地存儲中,以便在刷新頁面后重新加載數(shù)據(jù)。這有助于保持應(yīng)用的狀態(tài)一致性,提升用戶體驗。
- 全局配置:可以通過 QueryClient 進行全局配置,如設(shè)置默認的緩存時間、重試策略等。
SWR (目前僅支持react)
SWR 是 "stale-while-revalidate" 的縮寫,它是一個用于數(shù)據(jù)獲取和緩存的React Hooks庫,側(cè)重于異步狀態(tài)管理,采用輕量級Hooks簡化數(shù)據(jù)獲取,專為構(gòu)建快速響應(yīng)的用戶界面而設(shè)計。
它的工作原理是先返回緩存的數(shù)據(jù),然后在后臺發(fā)起請求獲取最新的數(shù)據(jù),并在收到新數(shù)據(jù)后更新UI。這種模式可以提供即時的用戶體驗,同時確保數(shù)據(jù)保持最新。
- 即時響應(yīng):當組件首次渲染時,SWR 會立即返回緩存中的舊數(shù)據(jù)(如果有)。這使得用戶界面能夠瞬間加載,無需等待網(wǎng)絡(luò)請求完成。
- 自動重驗證:一旦從緩存中讀取了數(shù)據(jù),SWR 就會在后臺發(fā)起請求以獲取最新數(shù)據(jù)。這個過程對用戶來說是透明的,只有當新數(shù)據(jù)到達時才會更新UI。
- 簡單的API:SWR 提供了一個非常直觀的 useSWR Hook 來簡化數(shù)據(jù)獲取邏輯,包括處理加載狀態(tài)、錯誤和成功情況。
- 支持多種數(shù)據(jù)源:雖然 SWR 最常用于HTTP請求,但它也可以與其他類型的數(shù)據(jù)源一起工作,比如 WebSocket 或者本地存儲。
- 優(yōu)化性能:SWR 內(nèi)置了一些性能優(yōu)化特性,如并發(fā)模式支持、自動垃圾回收和去抖動/節(jié)流功能,幫助減少不必要的請求。
- 開發(fā)工具集成:與 React Query 類似,SWR 也提供了開發(fā)者工具來監(jiān)控和調(diào)試數(shù)據(jù)獲取行為。
- 靈活配置:可以通過配置選項自定義刷新策略、重試機制等,以適應(yīng)不同的應(yīng)用場景需求。
- 服務(wù)端渲染(SSR)兼容:SWR 支持服務(wù)器端渲染,可以在頁面初次加載時預(yù)先填充緩存,從而加快客戶端的首次渲染速度。
-
數(shù)據(jù)緩存:
- 自定義全局緩存:SWR 使用全局緩存共享數(shù)據(jù),同時允許通過SWRConfig的provider選項自定義如何存儲緩存。
- 修改緩存數(shù)據(jù):提供mutate函數(shù)來修改緩存,包括清除所有緩存數(shù)據(jù)或更新特定緩存項。
參考文檔:
如何使用React Query管理異步請求&數(shù)據(jù)
TanStackQuery v5
【深度對比】如何選擇最適合的請求增強庫
理解SWR