useWorkingTree()
function useWorkingTree(): WorkingTreeResource;
Defined in: use-working-tree.ts:81
读写当前数据库的工作树。
Returns
Throws
组件树中没有 Provider、Provider 没拿到 db、异步 source 尚未就绪时各抛一条
不同的文案;异步 source 创建失败时原样抛出创建异常(与 useRxDB 同语义)
Example
const tree = useWorkingTree();
useEffect(() => void tree.status().catch(() => undefined), [tree.status]);
if (tree.statusState.phase === 'empty') return <span>没有未提交的改动</span>;
if (tree.statusState.phase === 'success') {
return <span>{tree.statusState.value.entryCount} 条未提交</span>;
}
return null;
Remarks
创建入口本身一次 IO 都不发:十二格初值全是 idle,只有真的调了方法才会去读库。
挂上就查会让每个只想拿到 commit() 的组件在挂载时白发一轮查询 —— 而 React 下这还会
在 StrictMode 里变成两轮。
没有变更流:状态只在经本入口发出的命令之后更新。别的标签页写进来的改动、直接走
entity.save() 的写入,都不会触发重渲染 —— 需要最新值就再调一次 status()。这是核心
侧至今没有工作树变更流的如实反映,不是这里省了一步。
状态用 useState 而不是 useSyncExternalStore:状态源就在 React 里(本 hook 自己的
命令产生它),不是外部 store,没有撕裂可言。
数据库取不到时抛错而不是返回一份「一切干净」的默认值:那会把「入口没接上」 伪装成「没有未提交变更」,恰好是最需要出声的时候不出声。