跳到主要内容

useAction()

function useAction<Options, RT>(promiseFn): ActionResource<Options, RT>;

Defined in: rxdb-react/src/use-action.ts:56

把一个异步函数包装成带在途状态的 action。

Type Parameters​

Type ParameterDefault typeDescription
Optionsvoidexecute 的入参类型
RTunknown异步函数的返回值类型

Parameters​

ParameterTypeDescription
promiseFn(options) => Promise<RT>真正执行的异步函数;每次渲染可以传新的

Returns​

ActionResource<Options, RT>

见 ActionResource

Example​

const save = useAction((todo: Todo) => repository.save(todo));

return (
<button disabled={save.isPending} onClick={() => save.execute(todo)}>
`{save.isPending ? '保存中…' : '保存'}`
</button>
);

Remarks​

isPending 是并发计数而不是布尔开关:N 次调用同时在途时它一直是 true, 直到最后一个 settle。计数在 finally 里回退,因此失败也会正确复位。

有意不做去重与取消:重复点击会真的执行多次,错误原样 reject 给调用方。 需要防抖、串行化或取消,请在 promiseFn 内部或调用点自行处理 —— 把策略藏进 hook 会让「按钮点了没反应」变成无法排查的黑箱。

三端等价实现:Angular useAction(Signal)、Vue useAction(ComputedRef), 语义完全一致,只是 isPending 的容器形态不同。