tools: add makeDisposable function for mobx reactions
This commit is contained in:
parent
815a6336ec
commit
202eb6e304
23
tools/mobx.ts
Normal file
23
tools/mobx.ts
Normal file
@ -0,0 +1,23 @@
|
||||
/* eslint-disable import/prefer-default-export */
|
||||
import type { IReactionDisposer } from 'mobx';
|
||||
import { autorun } from 'mobx';
|
||||
|
||||
export function makeDisposable(
|
||||
createReaction: () => IReactionDisposer,
|
||||
mustBeDisposed: () => boolean
|
||||
) {
|
||||
let disposer: IReactionDisposer | undefined;
|
||||
|
||||
function cleanDisposer() {
|
||||
disposer = undefined;
|
||||
}
|
||||
|
||||
autorun(() => {
|
||||
if (mustBeDisposed()) {
|
||||
if (disposer !== undefined) disposer();
|
||||
cleanDisposer();
|
||||
} else {
|
||||
disposer = createReaction();
|
||||
}
|
||||
});
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user