From 717bb0daf8489e6c9ee709ab2c45ee614c7148bd Mon Sep 17 00:00:00 2001 From: vchikalkin Date: Wed, 12 Apr 2023 00:59:36 +0300 Subject: [PATCH] tools: fix disposableReaction --- packages/tools/mobx.ts | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/packages/tools/mobx.ts b/packages/tools/mobx.ts index c4c2b90..0319b68 100644 --- a/packages/tools/mobx.ts +++ b/packages/tools/mobx.ts @@ -1,9 +1,9 @@ import type { IReactionDisposer, IReactionOptions, IReactionPublic } from 'mobx'; -import { autorun, reaction } from 'mobx'; +import { reaction } from 'mobx'; import { debounce, omit } from 'radash'; export function disposableReaction( - mustBeDisposed: () => boolean, + disposeExpression: () => boolean, expression: (r: IReactionPublic) => T, effect: ( arg: T, @@ -14,7 +14,7 @@ export function disposableReaction( ) { let disposer: IReactionDisposer | undefined; - if (!mustBeDisposed()) { + if (!disposeExpression()) { disposer = reaction(expression, effect, reactionOpts); } @@ -22,13 +22,16 @@ export function disposableReaction( disposer = undefined; } - autorun(() => { - if (mustBeDisposed()) { + reaction(disposeExpression, (mustBeDisposed) => { + if (mustBeDisposed) { if (disposer !== undefined) disposer(); cleanDisposer(); } else { - const opts = reactionOpts ? omit(reactionOpts, ['fireImmediately']) : undefined; - disposer = reaction(expression, effect, opts); + disposer = reaction( + expression, + effect, + reactionOpts ? omit(reactionOpts, ['fireImmediately']) : undefined + ); } }); }