跳至內容
文件
自動重新驗證

自動重新驗證

💡

如果您想手動重新驗證資料,請查看變更

焦點時重新驗證

當您重新聚焦頁面或在分頁之間切換時,SWR 會自動重新驗證資料。

這在立即同步到最新狀態時很有用。這對於刷新過期的行動分頁或**進入睡眠**的筆記型電腦等情況下的資料很有幫助。

影片:使用焦點重新驗證來自動同步頁面之間的登入狀態。

此功能預設為啟用。您可以透過revalidateOnFocus選項停用它。

間隔時重新驗證

在許多情況下,資料會因多個裝置、多個使用者、多個分頁而變更。我們如何隨著時間推移更新螢幕上的資料?

SWR 將為您提供自動重新獲取資料的選項。它是**智慧的**,這表示只有在與 Hook 關聯的元件**在螢幕上**時才會發生重新獲取。

影片:當使用者進行變更時,兩個工作階段最終都會呈現相同的資料。

您可以透過設定refreshInterval值來啟用它

useSWR('/api/todos', fetcher, { refreshInterval: 1000 })

還有refreshWhenHiddenrefreshWhenOffline等選項。兩者預設皆停用,因此當網頁不在螢幕上或沒有網路連線時,SWR 不會獲取資料。

重新連線時重新驗證

當使用者重新上線時也進行重新驗證很有用。當使用者解鎖電腦時,但網路並未在同一時間連線時,這種情況經常發生。

為確保資料始終為最新狀態,SWR 會在網路恢復時自動重新驗證。

此功能預設為啟用。您可以透過revalidateOnReconnect選項停用它。

停用自動重新驗證

如果資源是**不可變的**,如果我們再次重新驗證,它永遠不會改變,我們可以為它停用所有類型的自動重新驗證。

自 1.0 版起,SWR 提供了一個輔助 Hook useSWRImmutable,將資源標示為不可變。

import useSWRImmutable from 'swr/immutable'
 
// ...
useSWRImmutable(key, fetcher, options)

它具有與一般useSWR Hook 相同的 API 介面。您也可以透過停用下列重新驗證選項來執行相同的操作

useSWR(key, fetcher, {
  revalidateIfStale: false,
  revalidateOnFocus: false,
  revalidateOnReconnect: false
})
 
// equivalent to
useSWRImmutable(key, fetcher)

revalidateIfStale控制當 SWR 掛載且有過時資料時是否應重新驗證。

以上這 2 個 Hook 執行**完全相同**的操作。一旦資料被快取,它們將永遠不會再次請求它。

掛載時重新驗證

強制覆寫掛載時的 SWR 重新驗證很有用。預設情況下,revalidateOnMount的值設定為未定義。

SWR Hook 的掛載方式如下

  • 首先它會檢查是否已定義revalidateOnMount。如果為 true,則開始請求,如果為 false,則停止。

revalidateIfStale有助於控制掛載行為。預設情況下,revalidateIfStale設定為 true。

如果revalidateIfStale設定為 true,則只有在有任何快取資料時才會重新獲取,否則不會重新獲取。