createApi
为自定义 requestFn 快速创建可用的 RequestBuilder,继续享受 TanStack Query 的缓存与异步状态管理
createApi
createApi 用于在你不想走通用 HTTP requestFn(甚至不是 HTTP)的场景下,快速创建一个可用的 RequestBuilder 实例:你只需要提供 queryKey 与 requestFn(params),就能直接使用 useQuery/useMutation、缓存操作等能力。
什么时候用
- ethers.js / 合约方法调用
- 第三方 SDK(不是 axios/fetch 模式)
- WebWorker / 本地计算任务(希望有 rq 的缓存、重试、状态)
基本用法
import { createApi } from '@dune2/tools/rq/createApi';
type Req = { userId: string };
type Res = { id: string; name: string };
const getUserApi = createApi<Req, Res>({
queryKey: 'sdk.getUser',
requestFn: async (params) => {
// 这里写你自己的调用逻辑(可以不是 HTTP)
return mySdk.getUser(params.userId);
},
});
在 React 里使用:
function UserName({ userId }: { userId: string }) {
const { data, isLoading } = getUserApi.useQuery({ userId });
if (isLoading) return null;
return <div>{data?.name}</div>;
}
和 RequestBuilder 的关系
createApi 底层仍然基于 RequestBuilder:
queryKey会映射成内部的url(用于生成 queryKey)- 内部用
method: "get",让参数从params走(便于 rq 的 queryKey 稳定) - 其它
RequestBuilderOptions(例如queryClient、默认useQueryOptions等)也可以一并传入