Skip to main content

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,
}