自動重新驗證
如果您想手動重新驗證資料,請查看變更。
焦點時重新驗證
當您重新聚焦頁面或在分頁之間切換時,SWR 會自動重新驗證資料。
這在立即同步到最新狀態時很有用。這對於刷新過期的行動分頁或**進入睡眠**的筆記型電腦等情況下的資料很有幫助。
此功能預設為啟用。您可以透過revalidateOnFocus
選項停用它。
間隔時重新驗證
在許多情況下,資料會因多個裝置、多個使用者、多個分頁而變更。我們如何隨著時間推移更新螢幕上的資料?
SWR 將為您提供自動重新獲取資料的選項。它是**智慧的**,這表示只有在與 Hook 關聯的元件**在螢幕上**時才會發生重新獲取。
您可以透過設定refreshInterval
值來啟用它
useSWR('/api/todos', fetcher, { refreshInterval: 1000 })
還有refreshWhenHidden
和refreshWhenOffline
等選項。兩者預設皆停用,因此當網頁不在螢幕上或沒有網路連線時,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,則只有在有任何快取資料時才會重新獲取,否則不會重新獲取。