RxDBResource<T>
Defined in: rxdb-vue/src/hooks.ts:77
基础查询 hooks 返回的响应式资源。
Remarks
这是一个 reactive 对象,不是一组 Ref。
必须整体持有,或用 toRefs() 解构:
const user = useGet(User, 'user-1'); // ✅ 整体持有
const { value } = toRefs(useGet(User, 'user-1')); // ✅ toRefs 后解构
const { value } = useGet(User, 'user-1'); // ❌ 一次性快照,之后永不更新
同包的 InfiniteScrollResource 成员是 ComputedRef、解构安全,
两者形态不同是历史契约(RVU-008),不要互相类推。
状态组合
| 阶段 | isLoading | hasValue | isEmpty | error | value |
|---|---|---|---|---|---|
| 首次订阅前 | true | false | undefined | undefined | defaultValue |
| 收到数据 | false | true | 是否空集 | undefined | 新值 |
| 出错 | false | false | undefined | 错误 | 上一次的值 |
| 选项变化、新一轮查询进行中 | true | false | undefined | undefined | 上一次的值(stale) |
| 无 next 直接 complete | false | false | undefined | undefined | 上一次的值(stale) |
关键点:value 在重查期间保留旧值(stale-while-revalidate),
但 hasValue 会同步落回 false —— 旧值不再被宣称属于新查询条件(RVU-003)。
判断「当前值可信」要看 hasValue,不要看 value !== defaultValue。
生命周期
- Provider:必须在调用 hook 的组件或其祖先上调用
provideRxDB(),否则抛错。 - SSR:服务端无
window,跳过订阅,资源停在isLoading: true的初始态; 客户端 hydrate 是全新 setup,会正常发起查询。 - 清理:订阅挂在当前 effect scope 上,scope 销毁(组件卸载)时自动退订, 之后到达的迟到 emission 一律丢弃。
Type Parameters
| Type Parameter | Description |
|---|---|
T | 查询结果类型。 |
Properties
error
readonly error: Error | undefined;
Defined in: rxdb-vue/src/hooks.ts:86
本轮查询的错误;成功或重查开始时清空。非 Error 载荷会被包成真正的 Error。
hasValue
readonly hasValue: boolean;
Defined in: rxdb-vue/src/hooks.ts:99
value 是否属于当前查询条件。重查开始即落回 false,收到 next 才为 true。
isEmpty
readonly isEmpty: boolean | undefined;
Defined in: rxdb-vue/src/hooks.ts:95
结果是否为空:数组按 length === 0,单实体按 == null。
undefined 表示本轮尚无结论(加载中、出错、或无 next 就 complete)。
isLoading
readonly isLoading: boolean;
Defined in: rxdb-vue/src/hooks.ts:90
是否有一轮查询正在进行(从订阅入口到首个 next / error / complete)。
value
readonly value: T;
Defined in: rxdb-vue/src/hooks.ts:82
查询结果;订阅前与出错时是 hook 的 defaultValue,
重查期间保留上一轮的值(配合 hasValue 判断是否可信)。