Vanilla:Query Client 与生命周期
在无框架场景中,createQueryClient 是 Query 的核心入口。它负责缓存、状态机、重试与请求协调。
- 你要在 Node、工具脚本或自定义 runtime 中使用 Query。
- 你要先理解 Query 公共语义,再迁移到具体框架。
核心 API
Section titled “核心 API”import { createQueryClient } from '@iostore/store/query';
const client = createQueryClient({ defaultStaleTime: 5_000, defaultRetry: 1,});
const userQuery = client.defineQuery({ key: ['user', 1], queryFn: ({ signal }) => fetch('/api/users/1', { signal }).then((r) => r.json()),});
await userQuery.prefetch();await userQuery.refetch();userQuery.cancel();client.invalidateQueries({ key: ['user', 1] });fetch 与 refetch 的区别
Section titled “fetch 与 refetch 的区别”fetch()会遵守staleTime新鲜度语义:数据新鲜时可能直接返回缓存。refetch()会强制触发新请求,是显式刷新入口。
- 不透传
signal,导致取消只改状态不取消网络请求。 - 用不稳定对象做 key,造成缓存槽位漂移。
- 全局复用一个 client 到 SSR 多请求,导致数据串写。
- 先定义稳定 key 规范,再接入业务请求。
- 把
invalidateQueries当作写后一致性的默认动作。 - 在进入框架前先验证“预取/取消/失效”三条链路。