createAsyncStoragePersister
安装
此实用程序作为一个单独的包提供,可以通过 '@tanstack/query-async-storage-persister'
导入。
npm install @tanstack/query-async-storage-persister @tanstack/react-query-persist-client
或者
pnpm add @tanstack/query-async-storage-persister @tanstack/react-query-persist-client
或者
yarn add @tanstack/query-async-storage-persister @tanstack/react-query-persist-client
用法
导入 createAsyncStoragePersister
函数
创建一个新的 asyncStoragePersister
您可以将任何符合 AsyncStorage
接口的 storage
传递给它 - 下面的示例使用了 React Native 的 async-storage
通过使用 PersistQueryClientProvider
组件包装您的应用程序。
import AsyncStorage from '@react-native-async-storage/async-storage';
import { QueryClient } from '@tanstack/react-query';
import { PersistQueryClientProvider } from '@tanstack/react-query-persist-client';
import { createAsyncStoragePersister } from '@tanstack/query-async-storage-persister';
const queryClient = new QueryClient({
defaultOptions: {
queries: {
cacheTime: 1000 * 60 * 60 * 24, // 24小时
},
},
});
const asyncStoragePersister = createAsyncStoragePersister({
storage: AsyncStorage,
});
const Root = () => (
<PersistQueryClientProvider
client={queryClient}
persistOptions={{ persister: asyncStoragePersister }}
>
<App />
</PersistQueryClientProvider>
);
export default Root;
重试
重试与 SyncStoragePersister 相同,只是它们也可以是异步的。您还可以使用所有预定义的重试处理程序。
API createAsyncStoragePersister
调用此函数创建一个 asyncStoragePersister,稍后可以与 persistQueryClient
一起使用。
createAsyncStoragePersister(options: CreateAsyncStoragePersisterOptions)
Options
interface CreateAsyncStoragePersisterOptions {
/**用于从缓存中设置和检索项目的存储客户端 */
storage: AsyncStorage | undefined | null
/** 存储缓存到 localStorage 时要使用的键*/
key?: string
/**为避免频繁保存缓存到磁盘,请传递一个以毫秒为单位的时间来进行节流 */
throttleTime?: number
/** 如何将数据序列化到存储中*/
serialize?: (client: PersistedClient) => string
/**如何从存储中反序列化数据 */
deserialize?: (cachedString: string) => PersistedClient
/** 如何在错误时重试持久化*/
retry?: AsyncPersistRetryer
}
interface AsyncStorage {
getItem: (key: string) => Promise<string | null>
setItem: (key: string, value: string) => Promise<unknown>
removeItem: (key: string) => Promise<void>
}
默认选项为:
{
key = `REACT_QUERY_OFFLINE_CACHE`,
throttleTime = 1000,
serialize = JSON.stringify,
deserialize = JSON.parse,
}