useAction()
function useAction<Options, RT>(promiseFn): ActionResource<Options, RT>;
Defined in: rxdb-react/src/use-action.ts:56
把一个异步函数包装成带在途状态的 action。
Type Parameters
| Type Parameter | Default type | Description |
|---|---|---|
Options | void | execute 的入参类型 |
RT | unknown | 异步函数的返回值类型 |
Parameters
| Parameter | Type | Description |
|---|---|---|
promiseFn | (options) => Promise<RT> | 真正执行的异步函数;每次渲染可以传新的 |
Returns
ActionResource<Options, RT>
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 的容器形态不同。