跳到主要内容

useWorkingTree()

function useWorkingTree(): WorkingTreeResource;

Defined in: use-working-tree.ts:150

读写当前数据库的工作树。

Returns​

WorkingTreeResource

见 WorkingTreeResource

Throws​

没有 provider、数据库尚未就绪时各抛一条不同的文案;异步 source 创建失败时 原样抛出创建异常(与 useRxDB 同语义)

Example​

<script lang="ts" setup>
import { useWorkingTree } from '@aiao/rxdb-plugin-working-tree-vue';

const tree = useWorkingTree();
await tree.status();
</script>

<template>
<span v-if="tree.statusState.value.phase === 'empty'">没有未提交的改动</span>
<span v-else-if="tree.statusState.value.phase === 'success'">
{{ tree.statusState.value.value.entryCount }} 条未提交
</span>
</template>

Remarks​

必须在 setup 中调用 —— 它经 useRxDB() 取库(inject 只在 setup 期可用)。

创建入口本身一次 IO 都不发:十二格初值全是 idle,只有真的调了方法才会去读库。 挂上就查会让每个只想拿到 commit() 的组件在挂载时白发一轮查询。

没有变更流:状态只在经本入口发出的命令之后更新,因此这里也没有需要退订的订阅。 别的标签页写进来的改动、直接走 entity.save() 的写入,都不会推一份新的 status 过来 —— 需要最新值就再调一次 status()。这是核心侧至今没有工作树变更流的如实反映, 不是这里省了一步。

状态装在 shallowRef 里:整份状态每次都是新对象,深响应只会让 Vue 白白遍历十二棵 结构固定的树。

数据库取不到时抛错而不是返回一份「一切干净」的默认值:那会把「入口没接上」 伪装成「没有未提交变更」,恰好是最需要出声的时候不出声。